You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让CMake在Mac与Ubuntu生成相同扩展名的共享库?

解决跨平台共享库扩展名统一问题

CMake默认会根据操作系统设置共享库后缀:Mac生成.dylib,Linux生成.so。要让两个平台生成相同扩展名的共享库,有两种简单实现方式:

方式一:全局统一所有共享库后缀

在cmake_minimum_required之后、project之前添加全局配置,强制所有共享库使用同一后缀(推荐统一为.so,跨平台兼容性更好):

cmake_minimum_required(VERSION 3.16)
# 强制所有共享库使用.so后缀,跨平台统一
set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
set (CMAKE_CXX_STANDARD 17)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
project(BICS_ABM)

方式二:仅针对目标库设置后缀

如果只想让BICS_ABM_lib这个库统一后缀,在add_library代码块之后添加目标属性配置:

add_library(BICS_ABM_lib SHARED
    src/BICS_ABM.h 
    src/print_attributes.cpp
    src/decrement.cpp
    src/set_sick.cpp
    src/transmit.cpp
    src/distribute_vax.cpp
    src/history.cpp
    src/BICS_ABM.cpp 
    src/py_defs.cpp
    src/params.cpp
    src/mixing.cpp
)
# 为该库指定固定后缀
set_target_properties(BICS_ABM_lib PROPERTIES SUFFIX ".so")

补充说明

  • 统一使用.so后缀是更稳妥的选择:MacOS的Python ctypes可以正常加载.so文件,Linux系统也原生支持,无需额外适配。如果偏好统一为.dylib,只需把上述代码中的.so替换成.dylib即可,但Linux下Python对该扩展名的识别兼容性略逊于.so。
  • 你的CMakeLists.txt中测试部分存在小问题:add_test的目标应该是BICS_ABM_tests而非BICS_ABM,修正后如下:
add_test(Vax_tests BICS_ABM_tests)
add_test(DataTests BICS_ABM_tests)
add_test(DecrementTests BICS_ABM_tests)

内容的提问来源于stack exchange,提问作者Ethan Roubenoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:27:22