0

我有 2 个静态库,

libalgha.a 具有 2 个功能:func1()func2()

libbeta.a具有 2 个功能:func3()func4()

我有 1 个可执行文件 ( mytest) 与这 2 个库链接。可执行文件仅调用func1()func3()。因此,据我了解,链接器只会将这两个函数的符号放入可执行文件中。

可执行文件在运行时加载dlopen()一个共享库 ( libgamma.so),并且此共享库使用func2()来自的函数libalgha.a。运行时mytest出现错误:

符号 func2:未找到引用的符号

由于 Solaris 32/64 位问题,我无法将其包含libalgha.a在内。libgamma.so

那么如何mytest与 的所有符号链接libalgha.a

4

2 回答 2

1

也许-u func2会有所帮助。请参阅手册页

不幸的是,似乎没有--whole-archive像 GNU 那样的选项。

于 2011-09-30T11:25:24.053 回答
1

func2在您的程序源中包含对的引用,例如:

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

或者,使用 将整个库链接到一个对象,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 回答