无法使可执行文件可移植

Posted

技术标签:

【中文标题】无法使可执行文件可移植【英文标题】:Can't make executable portable 【发布时间】:2016-06-03 15:50:41 【问题描述】:

我用这个库做了一个小 C++ 程序:http://libtins.github.io

我编译:g++ -o arp arp.cpp -ltins

它运行良好(Ubuntu 14.04 64 位),但是如果我将可执行文件发送给朋友,他在运行时会收到此错误:

error while loading shared libraries: libtins.so.3.4: cannot open shared object file: No such file or directory

我查看了***,发现了一些关于静态链接和动态链接的内容,还尝试了一些g++参数但没有成功。

是否有可能创建一个“包含”共享对象本身的二进制文件?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用-static 静态链接库。

g++ -o arp arp.cc -ltins -static

要静态构建 libtin,您可以参考其README 中的以下部分:

静态/共享构建

请注意,默认情况下,仅编译共享对象。如果你愿意 喜欢生成静态库文件,运行:

cmake ../ -DLIBTINS_BUILD_SHARED=0

【讨论】:

给我这个错误(翻译):/usr/bin/ld: 无法找到 -ltins @Matteo 您可能必须将此库重新编译为静态库。 我该怎么做? @Matteo 已编辑以包含关于静态构建的 README 部分 谢谢,它运行良好,但二进制文件大了 200 倍

以上是关于无法使可执行文件可移植的主要内容,如果未能解决你的问题,请参考以下文章

相同的源代码,不同的可执行文件大小?

Qt打包成exe可执行可移植文件

Qt打包成exe可执行可移植文件

Qt打包成exe可执行可移植文件

实验1 可移植可执行文件格式应用

将 .NET Core 应用程序发布为可移植的可执行文件