如何静态链接到 POCO C++ so 文件
How to statically link to a POCO C++ so file
在Linux中,我正在尝试静态链接POCO C++库,以便我可以将生成的可执行文件分发到其他未安装POCO库的计算机。 我可以像这样编译我的源文件(一个简单的 gunzip 替换(:
$ g++ mygunzip.cpp -L/usr/local/lib/ -lPocoFoundation
但是生成的可执行文件要求在执行它的机器中安装 PocoFoundation 库。 我不知道如何静态链接 PocoFoundation 库,以便不需要在目标设备上安装 POCO 库。 我已经尝试了这个和其他一些事情,但没有任何效果:
$ g++ -o mygunzip.o mygunzip.cpp -static /usr/local/lib/libPocoFoundation.so.60
/usr/bin/ld: attempted static link of dynamic object `/usr/local/lib/libPocoFoundation.so.60'
collect2: error: ld returned 1 exit status
我以前没有深入研究过这种编译,所以任何指导都值得赞赏。
谢谢
更新我能够通过运行./configure --static, make, sudo make install
来获取为 POCO 构建的静态库。 现在我有以下静态库:
$ sudo find /usr/local/lib/ -iname "*poco*a"
/usr/local/lib/libPocoJSON.a
/usr/local/lib/libPocoFoundationd.a
/usr/local/lib/libPocoUtild.a
/usr/local/lib/libPocoXMLd.a
/usr/local/lib/libPocoEncodingsd.a
/usr/local/lib/libPocoXML.a
/usr/local/lib/libPocoNet.a
/usr/local/lib/libPocoFoundation.a
/usr/local/lib/libPocoNetd.a
/usr/local/lib/libPocoJSONd.a
/usr/local/lib/libPocoEncodings.a
/usr/local/lib/libPocoUtil.a
但是我编译的代码似乎仍然没有静态链接,因为当我添加 -Bstatic 标志时没有区别。
$ g++ -o withoutStatic mygunzip.cpp -L/usr/local/lib/ -lPocoFoundation
$ g++ -o withStatic mygunzip.cpp -Bstatic -L/usr/local/lib/ -lPocoFoundation
$ g++ -o withStatic2 mygunzip.cpp -L/usr/local/lib/ -Bstatic -lPocoFoundation
$ md5sum with*
7b9374bb3f8772ed23db99090c269a84 withoutStatic
7b9374bb3f8772ed23db99090c269a84 withStatic
7b9374bb3f8772ed23db99090c269a84 withStatic2
答案我想我找到了解决方案:我用-l:libPocoFoundation.a代替-lPocoFoundation。 这导致了一个更大的可执行文件,我假设因为它包含静态 POCO 库:
$ g++ -o withStatic3 mygunzip.cpp -L/usr/local/lib/ -l:libPocoFoundation.a
除非您有可用的静态 (.a( 库,否则无法静态链接它。.so
文件不能用于静态链接,它们只能用于动态链接。
此外,使用-static
作为 gcc 的命令行参数可以静态链接所有内容,包括例如libstdc++
,这可能不是您想要做的。如果只有您想要静态链接的 Poco 库,则需要提供链接器标志-Bstatic
并围绕它-Bdynamic
。
相关文章:
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- Poco FindMySql.cmake 无法找到 MySQL 源代码
- 像 POCO 这样的C++图书馆如何访问网络?
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- 使用 Poco::Zip 将文件附加到现有 zip 文件
- 无法使用 Poco 库正确克隆 JSON 数组C++
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- POCO C++对象到 JSON 字符串序列化
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- POCO C++加密/解密
- C++ POCO - 如何在不使用 run() 方法的情况下启动线程池上的线程?
- 使用 Poco::zip 添加新目录始终给出异常
- C++ Poco - 如何创建通知队列的向量?
- 如何使用 Poco::ZIP 压缩/解压缩 zip 文件
- C++ POCO - 如何美化 JSON?
- C++ Poco - 如何向特定线程发送通知/消息?
- 如何在 Poco 中将工作 HTTP 代码转换为 HTTPS
- 对于 poco 库来说,Boost_USE_STATIC_LIBS相当于什么?
- 与Poco库的Websocket连接
- 在C++中使用POCO和grain对多个对象进行反序列化