库链接到本身链接到应用程序的库->未定义引用

时间:2018-12-05 13:33:40

标签: c++ cmake linker-errors static-linking

我几个小时都在看我的问题,我被困住了...

我有一个库 lib_1 ,该库具有功能 getNumber()
然后,我有了一个具有功能 addNumbers() 的库 lib_2
addNumbers()从lib_1调用getNumber()

我的CMakeLists.txt:

add_library( lib_1 STATIC IMPORTED )
set_target_properties(lib_1 PROPERTIES IMPORTED_LOCATION path_to_lib_1)

add_library( lib_2 STATIC lib2.cpp )
target_link_libraries( lib_2 lib_1 )
target_include_directories(lib_2 PUBLIC include )

lib_2可以正常编译,使用getNumber()的单元测试也可以正常工作。

然后我想将lib_2链接到我的应用程序应用程序。

add_library( lib_1 STATIC IMPORTED )
set_target_properties(lib_1 PROPERTIES IMPORTED_LOCATION path_to_lib_1)

add_library( lib_2 STATIC IMPORTED )
set_target_properties(lib_2 PROPERTIES IMPORTED_LOCATION path_to_lib_2)

add_executable(app my_source_files )
target_link_libraries(app lib_1 lib_2)

当我编译我的应用程序时,出现此众所周知的错误:
在lib_2中的函数addNumbers()中,未定义对getNumber()的引用

我真的不明白,为什么它是未定义的引用?

并且顺便说一句,当我已经链接到本身静态链接到lib_1的lib_2时,我真的需要针对我的应用程序中的lib_1链接吗?

1 个答案:

答案 0 :(得分:0)

正如人们在评论中所见,解决方案是使静态链接库具有正确的顺序:

add_executable(app my_source_files )
target_link_libraries(app lib_2 lib_1)