如何从 visual studio 远程构建 32 位 linux 模块?
How to build a 32 bit linux module remotely from visual studio?
我一直在尝试创建一个跨平台项目。
需要构建 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 结尾的模块),我添加了上面的代码。
上面代码下面还有这段代码
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。
我一直在尝试创建一个跨平台项目。 需要构建 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 结尾的模块),我添加了上面的代码。
上面代码下面还有这段代码
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。