使用 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++ 程序

linux 用g++编译c++代码的问题

检查 C++ 编译器隐式生成的代码

C++ 中的符号扩展是编译器选项,还是依赖于编译器或依赖于目标?

[GCC for C++]编译选项---IDE掩盖下的天空

如何抑制有关 C++ 中未使用变量的警告?