Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将boost打包到共享库中_C++_Boost_Linker_Dependencies - Fatal编程技术网

C++ 将boost打包到共享库中

C++ 将boost打包到共享库中,c++,boost,linker,dependencies,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 生成输

我正试图编译一些带有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)
要将所有boost依赖项打包到.so文件中,我必须在
g++
调用中更改什么?

您不能只“填充”一个.so内部的另一个.so。您需要链接到静态库,而不是共享库

大多数Linux发行版都包含可选的“开发”子包,其中包含静态链接的共享库版本

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

-lboost_system
您必须将其替换为针对“/usr/lib64/libboost_system.a”或安装libboost_system.a的任何位置的显式链接。起泡、冲洗、重复,不仅针对您直接链接的boost库,还针对这些库本身链接的所有其他boost库,等等


有关共享库的静态链接版本在何处以及如何打包的信息,请参阅Linux发行版的文档。

我从源代码处编译了boost,并将静态库放在同一目录下,因此它只是在makefile中进行了更改。