我正在制作一个C ++库。在库中,我在另一个静态库中使用了一些函数(例如ref.a)。
我想生成一个库文件,mylib.a或mylib.so,这样任何使用我的库的程序都不需要链接到静态库(ref.a)。 我从其他人how to link static lib into dynamic lib获得了一些想法,比如" - 整个档案",但不太清楚如何去做。
要获取mylib.a,我只是ar -rc mylib.a mylib.o ref.a(可能不是标准方式)。 共享库如何,例如指mylib.so?
答案 0 :(得分:2)
要获取mylib.a,我只是ar -rc mylib.a mylib.o ref.a
不,那不行。在将其包含到mylib.a中之前,您必须“展开”ref.a
:
mkdir tmp.$$ && cd tmp.$$ && ar x ../ref.a &&
cd .. && ar rc mylib.a mylib.o tmp.$$/*.o &&
rm -rf tmp.$$
共享库
怎么样?
这更简单:
gcc -shared -o mylib.so mylib.o -Wl,--whole-archive ref.a -Wl,--no-whole-archive
(使用尾随-Wl,--no-whole-archive
非常重要非常,或者您可能会从编译器驱动程序添加到链接末尾的系统库中获得令人讨厌的链接错误。)