对不起,有许多类似的问题,但我确实发现,谷歌的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位的输出吗?进一步搜索这个问题并没有取得任何成功,所以如果有人能证实我是对的,并给出正确的方法,我将非常感激!
非常感谢!
发布于 2013-10-11 04:49:50
如果要使用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")发布于 2015-01-20 13:54:40
即使这看起来是额外的工作,我相信正确的解决方案是在这种情况下使用工具链文件。类似于:
# 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这里最重要的部分是,现在可以指定一个根dir路径(CMAKE_FIND_ROOT_PATH),用于搜索第三方库。实际上,您的编译器可能不够聪明,不知道在哪里搜索x86系统上的x86_64 Qt库。
有了工具链文件,就可以在par编译器的基础上指定另一个工具链文件,并且在从windows环境编译32位时,您应该能够调整选项。
现在,这是额外的工作,因为从x86_64 Linux操作系统编译32位非常简单,但是这个解决方案将适用于其他更奇特的设置。
有关工具链文件的更多信息,可以查看例如:
发布于 2011-04-27 16:16:37
CMAKE_CXX_FLAGS只影响C++编译器。您可能还必须为C编译器设置标志:
set (CMAKE_C_FLAGS "-m32")https://stackoverflow.com/questions/5805874
复制相似问题