将boost打包到共享库中
Pack boost into shared library
我正在尝试编译一些具有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文件中?
你不能把一个.so"塞"在另一个.so.你需要链接到静态库,而不是共享库。
大多数Linux发行版都包含一个可选的"开发"子包,其中包括静态链接的共享库版本。
您必须安装该软件包,然后完全更改链接自己库的方式。而不是,例如,与链接
-lboost_system
您必须将其替换为指向"/usr/lib64/libboostsystem.a"或安装了libboostsystem-a的任何位置的显式链接。Lather、漂洗、重复,不仅针对您直接链接的提升库,还针对这些库本身链接的所有其他提升库,等等。
有关静态链接的共享库版本的打包位置和方式的信息,请参阅Linux发行版的文档。
相关文章:
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 序列化和反序列化boost共享指针
- 多个共享工作池,带 Boost::Fiber
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- 在使用 boost 共享互斥体时,我应该在什么情况下使用 owns_lock() 函数
- 使用 boost::interprocess 共享内存时从 std::string 转换为 "MyShmString"
- std::unordered_map 在共享内存中使用 boost:::进程间分配器 - 缺点?
- 将 boost::function 与指向派生类的共享指针的参数一起使用
- 如何链接到与 Linux 中不同版本的 boost 链接的共享库
- 使用boost :: python手动构建共享对象
- 将 boost-di 与配置文件和共享库一起使用
- 当一个进程截断 Boost 进程间库创建的共享内存时,进程需要重新映射
- 使用boost进程间库的phpexec共享内存和Cloudfoundry容器问题
- boost::OSX 上 32 位和 64 位程序之间共享内存中的进程间同步机制(互斥体、条件)
- 使用 boost::interprocess 在共享内存中分配用户定义的结构
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 轮询命令以在 boost asio 中的共享队列中发送
- 如何在插件 [模块] 之间共享 boost::asio::io_service
- 访问Boost Bind时,共享库中的C 符号查找错误
- 可以在多个ssl流之间共享boost::asio::ssl::上下文