2016-12-30 10 views
0

多くの機能があるライブラリファイル(.lib)があります。私はそれから共有オブジェクトを構築しようとしています。しかし、ライブラリ内のシンボルのうち、ライブラリ内にある共有オブジェクトにはシンボルはありません。しかし、同じライブラリから実行可能ファイルを生成すると、シンボルが表示されます。.libのシンボルが.soにありません

ライブラリに問題がありますか? 共有オブジェクトの作成に適した形式でライブラリをコンパイルする必要がありますか?

+0

その.libファイルとは何ですか?アーカイブや共有ライブラリなど何か?それをどのようにコンパイルしたのか、共有ライブラリと実行可能ファイルをどのように構築するのかを投稿してください。 –

+0

私は与えられたmakeファイルの束があります。私はこれらを使って.lib(アーカイブ)をビルドしています。あなたはそれから.soを作る方法を提案できますか? –

答えて

0

未解決のシンボルを解決する.aのアーカイブ.oのファイルだけをプルするリンカの役割は何ですか?

共有ライブラリをリンクし、.aファイルのみをリンカに渡すと、未解決のシンボルはありません。したがって、.aのオブジェクトファイルは共有ライブラリには取得されません。

共有ライブラリをリンクするには、オブジェクトファイルを位置独立コード(,.oのファイルは通常.aのファイルがこのオプションなしで構築されます)としてコンパイルし、共有ライブラリにリンクする必要があります。いいえ.aファイルが必要です。

.aファイルをリンクすると、リンカーオプションを使用して、.aに存在するシンボルを明示的に定義解除することもできます。しかし、.aを含む各.oからの少なくとも1つのシンボルに言及する必要があるため、これはうまく拡張されません(リンカがそれからのシンボルではなく.o全体を引き込むと仮定します)。

関連する問題