dev*_*obf 49 c++ gcc cmake ld 32bit-64bit
很抱歉,有许多类似的问题,但我确实发现谷歌搜索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位输出?进一步谷歌搜索这个问题没有取得任何成功,所以如果有人能够证实我是对的,并给出正确的方法,我将非常感激!
非常感谢!
ant*_*009 42
如果要使用cmake编译和链接32位,请使用它来创建库和二进制文件:
创建库:
add_library(mylib SHARED my_source.c)
set_target_properties(mylib PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
创建可执行文件:
add_executable(mybin sources.c)
set_target_properties(mybin PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
希望这可以帮助,
mal*_*lat 18
即使这似乎是额外的工作,我相信一个正确的解决方案是在这种情况下使用工具链文件.就像是:
# the name of the target operating system
set(CMAKE_SYSTEM_NAME Linux)
# which compilers to use for C and C++
set(CMAKE_C_COMPILER gcc)
set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_COMPILER g++)
set(CMAKE_CXX_FLAGS -m32)
# here is the target environment located
set(CMAKE_FIND_ROOT_PATH   /usr/i486-linux-gnu )
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然后使用就是:
$ cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake /path/to/source
这里的重要部分是,现在可以指定一个根目录路径(CMAKE_FIND_ROOT_PATH),该路径应该用于搜索第三方lib.实际上,您的编译器可能不够聪明,无法知道在x86_64系统上搜索x86 Qt库的位置.
拥有一个工具链文件允许在par编译器的基础上指定一个不同的文件,并且你应该能够在从windows环境编译32位时调整该选项.
现在这是额外的工作,因为从x86_64 Linux操作系统编译32位非常简单,但这个解决方案适用于其他更奇特的设置.
有关工具链文件的更多信息,可以检查以下示例:
CMAKE_CXX_FLAGS只影响C++编译器.您可能还必须为C编译器设置标志:
set (CMAKE_C_FLAGS "-m32")
| 归档时间: | 
 | 
| 查看次数: | 56661 次 | 
| 最近记录: |