0

私は2つの静的ライブラリを持っています、

libalgha.a 2つの機能を備えています:func1()およびfunc2()

libbeta.a2つの機能を備えています:func3()およびfunc4()

mytestこれらの2つのライブラリにリンクされた1つの実行可能ファイル( )があります。func1()実行可能ファイルはとのみを呼び出しますfunc3()。したがって、私が理解しているように、リンカーはこれら2つの関数のシンボルのみを実行可能ファイルに入れます。

dlopen()実行可能ファイルは実行時に共有ライブラリ( )をロードしており、この共有ライブラリはからlibgamma.soの関数を使用します。実行すると、次のエラーが発生します。func2()libalgha.amytest

シンボルfunc2:参照されたシンボルが見つかりません

Solaris 32/64ビットの問題のため、libalgha.a内部に含めることができません。libgamma.so

mytestでは、どうすればのすべてのシンボルとリンクできlibalgha.aますか?

4

2 に答える 2

1

次のような参照をfunc2プログラム ソースに含めます。

extern void func2 ();
void (*pfunc2)() = func2;

または、 を使用してライブラリ全体を 1 つのオブジェクトにld -rリンクし、そのオブジェクトをライブラリではなく実行可能ファイルにリンクします。オブジェクトを抽出する必要がある場合と必要でない場合があります。たとえば、次のことが機能しない場合です。

ld -r -o libbeta.o libbeta.a

それからする

mkdir x
cd x
ar x ../libbeta.a
ld -r -o ../libbeta.o *.o
cd ..
rm -rf x
于 2011-11-06T19:10:57.000 に答える
1

多分-u func2助けになるでしょう。マニュアルページを参照してください。

--whole-archive残念ながら、 GNUのようなオプションはないようです。

于 2011-09-30T11:25:24.053 に答える