很抱歉,有很多类似的问题,但我确实发现,在谷歌上搜索CMake查询总是会产生类似但不相同的场景,冲突的CMake命令等等!
我需要强制我的项目生成32位二进制文件,因为我必须链接到一个仅提供32位版本的库。我根据以下错误消息诊断出了这种情况:
/usr/bin/ld: i386 architecture of input file `*external-32bit-lib*' is incompatible with i386:x86-64 output
因此,根据我所了解的情况,我应该用途:
set (CMAKE_CXX_FLAGS "-m32")
这确实改变了一些事情-我现在得到了几个错误,如:
/usr/bin/ld: i386 architecture of input file `*project-output-lib*' is incompatible with i386:x86-64 output
我 * 认为 * 这是因为-m32
使gcc生成了32位的二进制文件,但是ld仍然在尝试64位的输出?进一步的谷歌搜索这个问题没有给予任何成功,所以如果有人能验证我是正确的,并给出正确的方法,我将非常感激!
非常感谢!
6条答案
按热度按时间3yhwsihp1#
如果您想要使用cmake编译和链接32比特,请使用这个来建立程式库和二进制档:
创建库:
创建可执行文件:
2ic8powd2#
即使这看起来像额外的工作,我相信一个适当的解决方案是在这种情况下使用工具链文件。
那么用法就是:
这里重要的部分是,现在可以指定根目录路径(
CMAKE_FIND_ROOT_PATH
),用于搜索第三方库。实际上,您的编译器可能不够智能,不知道在x86_64系统上哪里搜索x86 Qt库。拥有一个工具链文件允许一个人在par编译器的基础上指定一个不同的工具链文件,并且当从windows环境中编译32位时,你应该能够调整这个选项。
现在,这是额外的工作,因为从x86_64 Linux操作系统编译32位是相当微不足道的,但这种解决方案将工作在其他更奇特的设置。
有关工具链文件的更多信息,可以查看以下示例:
prdp8dxp3#
CMAKE_CXX_FLAGS
只影响C++编译器。您可能还需要为C编译器设置标志:bqucvtff4#
听起来好像您也没有将m32传递给LFLAGS,或者有旧的obj文件在四处游荡。请确保先进行清理。
这个问题与您的问题类似:cmake, gcc, cuda and -m32
cig3rfwq5#
使用
TRY_RUN
命令得到以下源代码。size.cpp:
CMakeLists.txt:
它将在所有标准编译器上工作。
9udxz4iz6#
我使用了malat的方法并制作了一个工具链文件。
我有一个工具链文件,可以在一些Linux dist上工作,也许它会给予你灵感。它可能对你来说是工作的,或者你可能需要其他丑陋的hack来让你依赖的其他cmake脚本工作,或者w/e:
https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/cmake/Toolchain-cross-m32.cmake