我根本没有使用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及更新?我应该添加/删除哪些构建选项?
答案 0 :(得分:1)
/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