作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试创建一个跨平台项目。
需要构建 32 位和 64 位二进制文件 (dll)。
我正在使用 Visual Studio 并选择 x86-Release 或 x64-Release 解决了 Windows 的问题。
但是对于 linux,它总是构建 64 位二进制文件。
经过搜索,我发现需要安装 g++ multilib 并且需要将 -m32 标志传递给编译器和链接器。
我找到
set_target_properties(PROJECT_NAME PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
将解决问题。
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
message("WIN32 x64")
else()
message("WIN32 x32")
endif()
else(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
message("LINUX x64")
else()
message("LINUX x32")
endif()
endif(WIN32)
但是,它输出
1> [CMake] LINUX x64
所以它仍在构建 32 位版本。
最佳答案
正如评论中提到的,发现 CMAKE_SIZEOF_VOID_P 无法检测是否通过了 m32 标志。
所以我修改了这样的代码
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(OUTPUT_BITNESS 64)
else()
set(OUTPUT_BITNESS 32)
endif()
if(FORCE_32)
set_target_properties(PROJECT_NAME PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
set(OUTPUT_BITNESS 32)
endif()
if(WIN32)
if(OUTPUT_BITNESS EQUAL 64)
message("WIN32 x64")
else()
message("WIN32 x32")
endif()
else(WIN32)
if(OUTPUT_BITNESS EQUAL 64)
message("LINUX x64")
else()
message("LINUX x32")
endif()
endif(WIN32
所以要编译为 32 位,FORCE_32 变量必须设置为 1。
关于c++ - 如何从 Visual Studio 远程构建 32 位 linux 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71676871/
我是一名优秀的程序员,十分优秀!