使用 g++ -m32 选项编译 C++
Posted
技术标签:
【中文标题】使用 g++ -m32 选项编译 C++【英文标题】:Compiling C++ with g++ -m32 option 【发布时间】:2016-10-16 07:22:19 【问题描述】:我正在尝试这样编译:
-bash-4.1$ g++ -static -m32 Hello.cpp
并得到这样的错误:
/opt/rh/devtoolset-4/root/usr/libexec/gcc/x86_64-redhat-linux/5.2.1/ld: skipping incompatible /opt/rh/devtoolset-4/root/usr/lib/gcc/x86_64-redhat-linux/5.2.1/libstdc++.a when searching for -lstdc++
/opt/rh/devtoolset-4/root/usr/libexec/gcc/x86_64-redhat-linux/5.2.1/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
我也试过这个但仍然得到与上面完全相同的错误:
g++ -static -m32 -L/opt/rh/devtoolset-4/root/usr/lib/gcc/x86_64-redhat-linux/5.2.1/32 Hello.cpp
我已经尝试了两种命令 - 没有任何帮助。
为什么它仍然在寻找错误的目录?
是否使用-m32
选项覆盖-L
选项?
我在-m32
选项上找不到太多文档。
请帮忙。
谢谢!
【问题讨论】:
Compiling and linking a 32 bit application on Debian 64 bit的可能重复 您可以将-v
或/和-###
选项添加到编译行以检查详细输出。并检查此输出中是否存在您的路径,Alson -m32 选项不会覆盖 -L。 -m32
用于编译 32 位二进制文件
【参考方案1】:
为什么它仍在查看错误的目录?
编译器总是首先查找预定义目录。 -L
选项将您的路径添加到这些目录列表中,因此编译器仍然在查看错误的目录。如需更详细的输出,请尝试使用详细输出 -###
或 -v
选项编译您的程序。
是否使用 -m32 选项覆盖 -L 选项?
答案是否定的——-m32
options 是生成 32 位代码的选项,例如:
您可以在 64 位机器上生成适用于 32 位机器的 32 位代码。您也可以在 64 位机器上运行此代码 - 它会运行良好。
我找不到太多关于 -m32 选项的文档。 这是GCC docs的链接 这是关于directory searching options
的文档还要告诉编译器在哪里可以找到库,你可以在你的环境中设置LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$FULL_PATH_TO_YOUR_LIB
不要覆盖环境变量 - 如果您不确定自己在做什么,它可能会导致更多问题。
【讨论】:
这个问题也与服务器的设置方式有关。我必须按照服务器管理员的指示添加自定义路径更改。以上是关于使用 g++ -m32 选项编译 C++的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 g++ 在 Linux 上使用 boost/shared_ptr.hpp 编译 c++ 程序