2

OS X で GCC を使用して、複数の静的ライブラリから共有ライブラリを作成したいと考えています。

一部の静的ライブラリでは、共有ライブラリにそれを呼び出すコードがありません。これらの静的ライブラリのシンボルをエクスポートしたいだけです。これはデバッグ モードでは機能しますが、リリース モードでは機能しません (特にデッド コード ストライピングを有効にした場合)。理由は理解できます.gccは、静的ライブラリのこれらの関数は決して使用されないと考えています. しかし、gccにこれらのシンボルを強制的に含めるにはどうすればよいですか?

ローダーに -u オプションを追加しようとしましたが、「ローカル」シンボルしか生成されません。リンカにエクスポート シンボルを生成させる方法は?

また、MSVC のように、リンカー ディレクティブをソース コードに追加する方法があるかどうか疑問に思っています。#pragrma comment(linker, "/INCLUDE:xxxx")

私が静的ライブラリで定義した関数は次のようなものです:

extern "C"
void test() {}

前もって感謝します!-ジョニー

4

2 に答える 2

0

ar を使用して、スタティック ライブラリを構成オブジェクト ファイルに逆アセンブルします。次に、それらのオブジェクトをリンクして共有ライブラリを作成します。

ar -x libstatic.a
(一連の *.o ファイルを生成します)
gcc -shared -olibshared.so *.o # Linux
ld -dylib -olibshared.dylib *.o # Mac OSX

于 2009-06-19T19:18:27.477 に答える