2011-09-30 39 views
0

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

libalgha.a与2层的功能:与链接func3()func4()

我有1个可执行文件(mytest):func1()func2()

libbeta.a 2个功能这2个库。可执行文件仅调用func1()func3()。所以据我所知,链接器只会将这两个函数的符号放入可执行文件中。

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

symbol func2: referenced symbol not found

我不能包括libalgha.alibgamma.so因为在Solaris 32/64位问题。

那么如何链接mytestlibalgha.a的所有符号?

回答

1

也许-u func2会有所帮助。请参阅manual page

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

+0

感谢您的快速答复,问题是,在现实中,有这个静态库中有数百个函数,这就是为什么我要寻找一个更通用的选项,比如“import-all-symbols-of-this-library”。事实上,--whole-archive选项在Solaris中不可用。 – jav

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 
相关问题