针对dll / lib的cmake链接

时间:2014-08-19 20:12:22

标签: c++ dll cmake static-libraries

我的cmake输出是一个静态库。我正在创建它:

add_library(myMainLib STATIC ${BACKEND_SOURCES})

当我尝试将myMainLib链接到第三方lib / dll时出现问题。 dll文件将在运行时找到,但是,我正在尝试导入/链接lib文件,但没有成功。我的第三方库是SDL2和SDL2 NET。

我认为这是直截了当的,并且已经用尽了我在网上找到的所有方法。都失败了。我尝试过的列表如下。请告诉我我做错了什么。

  1. 使用target_link_libraries的简单方法

    add_library(myMainLib STATIC ${BACKEND_SOURCES})
    
    target_link_libraries(myMainLib path_to_thirdPartyLib/thirdParty.lib)
    
  2. 根据cmake docs

    add_library(myMainLib STATIC ${BACKEND_SOURCES})
    
    add_library(Third_Party SHARED IMPORTED)
    
    set_property(TARGET Third_Party PROPERTY IMPORTED_LOCATION path_to_thirdPartyLib/thirdParty.dll)
    
    set_property(TARGET Third_Party PROPERTY IMPORTED_IMPLIB path_to_thirdPartyLib/thirdParty.lib)
    
    target_link_libraries(myMainLib Third_Party)
    
  3. 使用链接目录设置库的路径

    add_library(myMainLib STATIC ${BACKEND_SOURCES})
    
    set(LIB_DIR path_to_thirdPartyLib)
    
    LINK_DIRECTORIES(${LIB_DIR})
    
    target_link_libraries(myMainLib ${LIB_DIR}/thirdParty.lib)
    
  4. 尝试查找库

    add_library(myMainLib STATIC ${BACKEND_SOURCES})
    
    find_library(Third_Party thirdParty.lib)
    
    if(Third_Party)
      #never gets in here
      target_link_libraries(myMainLib ${Third_Party})
    endif()
    

1 个答案:

答案 0 :(得分:2)

在CMake中,将静态库直接链接到另一个静态库的几个构建系统毫无意义。您可以构建一个静态库和第二个静态库,并将可执行项目链接到两者,但是不可能将第一个静态库与第二个库链接起来,然后将它们链接到最终的可执行文件中。虽然VS允许这样做,但它对其他构建系统没有意义,因此CMake避免使用它。

某些解决方案涉及使您的静态库成为共享库或将库源拉入可执行文件。

其他详情here