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

使用CMake将静态库链接到共享库的方式是否正确?LNK2019链接错误求助

问题分析与解决方案

首先明确:你用CMake将静态库链接到共享库的方式本身是正确的,出现的LNK2019错误并非链接方式问题,而是静态库EMR依赖的系统库未被纳入链接流程。

错误原因

报错中的__imp__CM_Get_DevNode_PropertyW@24是Windows设备管理API的符号,属于系统库setupapi.lib。静态库testemr.lib在编译时依赖这个库,但CMake不会自动传递导入静态库的系统依赖,所以当你把EMR链接到共享库camsdk时,链接器找不到这个系统符号。

修复方案

你需要为导入的静态库EMR显式声明它的接口依赖,这样CMake会自动把依赖的系统库传递给链接camsdk的环节。修改你的CMake代码,在设置EMR的IMPORTED_LOCATION之后添加以下内容:

if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
    # 给EMR静态库添加系统依赖setupapi.lib
    target_link_libraries(EMR INTERFACE setupapi.lib)
endif()

或者用属性设置的方式:

if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
    set_property(TARGET EMR PROPERTY INTERFACE_LINK_LIBRARIES setupapi.lib)
endif()

为什么你的链接写法是对的

target_link_libraries(${SHARED_BINARY} PUBLIC EMR)这个写法完全正确:

  • 使用PUBLIC会将EMR的接口属性(包括我们刚添加的setupapi.lib依赖)传递给所有链接camsdk的目标
  • 导入静态库的链接逻辑本身没有问题,只是缺失了依赖的系统库声明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:27:34