将提升打包到共享库中

时间:2016-03-31 23:53:57

标签: c++ boost linker dependencies

我正在尝试使用boost依赖项编译一些代码,我希望将其用作动态共享库,但没有任何boost依赖项(不需要使用boost安装)。我怎么能这么做呢?

我正在用以下代码编译我的代码:

g++ -Wall -fPIC -o myclass.o -c myclass.cpp 
g++ -shared -Wl,-soname,myclass.so.1 -o lib/myclass.so.1 myclass.o -lc

但是,构建的库显示了几个boost依赖项,如

ldd lib/myclass.so.1

产生输出:

linux-vdso.so.1 (0x00007fffda9df000)
libboost_system.so.1.60.0 => /usr/lib/libboost_system.so.1.60.0 (0x00007f934e776000)
libboost_serialization.so.1.60.0 => /usr/lib/libboost_serialization.so.1.60.0 (0x00007f934e538000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f934e1b6000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f934deb0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f934db0f000)
/usr/lib64/ld-linux-x86-64.so.2 (0x000055802a452000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f934d8f9000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f934d6f0000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f934d4d3000)

我必须在g++调用中更改以将所有boost依赖项打包到.so文件中?

1 个答案:

答案 0 :(得分:1)

你不能只是"东西"一个。所以在另一个.so。您需要链接静态库,而不是共享库。

大多数Linux发行版都包含一个可选的"开发"子包,包括静态链接版本的共享库。

您必须安装该软件包,然后完全更改链接自己库的方式。而不是,例如,与

链接
-lboost_system

您必须使用针对" /usr/lib64/libboost_system.a"或安装libboost_system.a的显式链接替换它。泡沫,冲洗,重复,而不仅仅是您直接链接的增强库,而是与这些库本身链接的所有其他增强库等...

有关打包共享库的静态链接版本的位置和方式的信息,请参阅Linux发行版的文档。