我的 cmake 的输出是一个静态库。我正在这样创建它:
add_library(myMainLib STATIC ${BACKEND_SOURCES})
当我尝试让 myMainLib 链接到第三方 lib/dll 时,出现了问题。 dll 文件将在运行时找到,但是,我尝试导入/链接 lib 文件,但没有成功。我的第三方库是SDL2和SDL2 NET。
我认为这很简单,并且已经用尽了我在网上找到的所有方法。全部失败。下面是我尝试过的列表。请告诉我我做错了什么。
-
简单方法,使用target_link_libraries
add_library(myMainLib STATIC ${BACKEND_SOURCES})
target_link_libraries(myMainLib path_to_thirdPartyLib/thirdParty.lib)
-
根据cmake 文档 http://www.cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets
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)
-
使用链接目录设置库的路径
add_library(myMainLib STATIC ${BACKEND_SOURCES})
set(LIB_DIR path_to_thirdPartyLib)
LINK_DIRECTORIES(${LIB_DIR})
target_link_libraries(myMainLib ${LIB_DIR}/thirdParty.lib)
-
尝试寻找图书馆
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()
在 CMake 和一些构建系统中,直接将静态库链接到另一个静态库是没有意义的。您可以构建一个静态库和第二个静态库,并将可执行项目链接到这两个库,但不可能将第一个静态库与第二个库链接,然后将它们链接到最终的可执行文件中。尽管 VS 允许这样做,但它对于其他构建系统没有意义,因此 CMake 避免这样做。
一些解决方案涉及使静态库成为共享库或将库源提取到可执行文件中。
其他详情here https://stackoverflow.com/a/18351904/1938163
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)