我正在尝试构建一个具有尽可能少的动态依赖项的小型 C++ 程序。 我面临的问题是我尝试构建的程序与 libmariadbcpp 具有动态依赖关系(无法静态链接)。
即在编译命令中使用 -static 选项会导致编译失败,并出现错误
/usr/bin/ld:尝试静态链接动态对象`/usr/local/lib/../lib/libmariadbcpp.so'
目前程序是使用命令构建的
gcc main.cpp -o main -lmariadbcpp
但是在 main 上运行 ldd 显示了与 libc.so.6、libm.so.6 等的依赖关系...
显然是命令
gcc main.cpp -o main -lmariadbcpp -static
不起作用,因为-static覆盖了-lmariadbcpp,但“逻辑上”类似于我想要实现的目标。
我尝试使用 -static-libstdc++ 但对生成的二进制文件没有明显的影响(libc 和 libm 仍然由 ldd 列出)。
有没有办法静态编译我的程序,以便 ldd 不会列出除 libmariadbcpp 之外的动态依赖项?
额外问题:-static-libstdc++ 等选项在哪里定义?我尝试使用 gcc 和 ld 的 --help 来查找它们,但没有成功。
非常感谢!
有没有办法静态编译我的程序,以便 ldd 不会列出除 libmariadbcpp 之外的动态依赖项?
没有。
如果您正在使用任何共享库,那么您必须还使用ld-linux.so
和
libc.so
。事实上,运行
ldd /usr/local/lib/libmariadbcpp.so
会同时显示
libc.so.6
和
ld-linux
,因此无论如何,你的
main
将始终具有这些依赖项。附注
http://xyproblem.info 可能与此处相关。