cc静态链接:如何导入一个.a库的所有符号



我有两个静态库,

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

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

我有一个可执行文件(mytest)链接到这两个库。可执行文件只调用func1()func3()。因此,据我所知,链接器只会将这两个函数的符号放入可执行文件中。

可执行文件在运行时加载dlopen() (libgamma.so),这个共享库使用libalgha.afunc2()函数。当运行mytest时,我得到错误:

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

由于Solaris 32/64位问题,我不能在libgamma.so中包含libalgha.a

那么我如何将mytestlibalgha.a的所有符号连接起来呢?

在程序源代码中包含对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

也许-u func2会有帮助。参考手册页

不幸的是,在GNU上似乎没有--whole-archive选项。

相关内容

  • 没有找到相关文章

最新更新