【发布时间】:2021-11-03 02:47:54
【问题描述】:
我有一个 C++ 项目,我想将它编译成一个包含所有共享库、第三方等的二进制文件。 我想将编译后的文件移动到不同的服务器而不安装任何依赖项。这就是为什么我需要一个一体化/捆绑的二进制文件。
例如,我试图编译这个:
g++ sample.cpp -o sample -Wl,-Bstatic -l:libyaml-cpp.so
但是我得到了这个错误,而我在/usr/lib 目录中确实有libyaml-cpp.so 文件:
/usr/bin/ld: attempted static link of dynamic object `/usr/lib/gcc/x86_64-pc-linux-gnu/11.1.0/../../../../lib/libyaml-cpp.so'
collect2: error: ld returned 1 exit status
解决问题的最佳方法是什么?通常在 GNU/Linux 平台上拥有一个包含所有依赖项的编译文件?
【问题讨论】:
-
或许
g++ sample.cpp -o sample -static -lyaml-cpp? -
@HolyBlackCat 它显示错误:
/usr/bin/ld: cannot find -lyaml-cpp -
您是从包管理器安装 yaml-cpp 还是自己构建的?
-
@HolyBlackCat 是的,我已经做到了。
-
什么“是”?你自己建的吗?或者你是从包管理器安装的吗?如果是后者,这个包是如何调用的,你使用的是什么 linux 发行版?