gpt4 book ai didi

linux -/usr/bin/ld : attempted static link of dynamic object `/usr/lib64/libm.so'

转载 作者:太空狗 更新时间:2023-10-29 12:26:06 28 4
gpt4 key购买 nike

我完全没有使用 gcc 进行构建的经验,现在需要一些帮助。我有一个使用以下选项构建的代码

gcc \
-g myCode.C \
-O \
-o myCode \
-I. \
-L. \
-L/usr/lib64 \
-lstdc++ \
-Wreturn-type \
-Wswitch \
-Wcomment \
-Wformat \
-Wchar-subscripts \
-Wparentheses \
-Wpointer-arith \
-Wcast-qual \
-Woverloaded-virtual \
-Wno-write-strings /usr/lib64/libm.so \
-Wno-deprecated

在 redhat 6 机器上编译 myCode.C 时它不能在旧版本的操作系统上运行并抛出错误

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found

为了解决这个问题,我尝试添加 -static 构建选项来使所有动态链接库成为静态的,但是有一些我不明白的构建错误:(

/usr/bin/ld: attempted static link of dynamic object `/usr/lib64/libm.so'
collect2: ld returned 1 exit status

如何让我的代码在旧版本的 redhat 上工作,而不是只在 6 和更新的版本上工作?我应该添加/删除哪些构建选项?

最佳答案

/usr/lib64/libm.so 是一个动态库。由于您显式链接它,-static 不会强制使用静态版本 (libm.a)您正在尝试编译 C++ 程序,因此您应该使用 g++。然后不需要传递 libstdc++libm 库。此外,/usr/lib64 应该在您的标准链接路径中,因此不需要。

所以你应该使用:

g++ \
-static \
-g myCode.C \
-O \
-o myCode \
-I. \
-L. \
-Wreturn-type \
-Wswitch \
-Wcomment \
-Wformat \
-Wchar-subscripts \
-Wparentheses \
-Wpointer-arith \
-Wcast-qual \
-Woverloaded-virtual \
-Wno-write-strings \
-Wno-deprecated

关于linux -/usr/bin/ld : attempted static link of dynamic object `/usr/lib64/libm.so' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39827753/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com