gpt4 book ai didi

c++ - 如何从 Visual Studio 远程构建 32 位 linux 模块?

转载 作者:行者123 更新时间:2023-12-04 19:25:22 28 4
gpt4 key购买 nike

我一直在尝试创建一个跨平台项目。
需要构建 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")
将解决问题。
所以为了构建一个 32 位的 linux 二进制文件(以 .so 结尾的 MODULE),我添加了上面的代码。
我在上面的代码下面也有这个代码
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 位版本。
我同时安装了 g++ 和 g++ multilib,但不确定 Visual Studio 调用的是哪一个。这可能是问题吗?

最佳答案

正如评论中提到的,发现 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com