首页 > 解决方案 > 链接到本身链接到应用程序的库的库 -> 未定义的引用

问题描述

我正在研究我的问题几个小时,但我被困住了......

我有一个带有函数的库lib_1getNumber()
然后我有一个带有函数的库lib_2addNumbers()。来自 lib_1 的
addNumbers()调用。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)

当我编译我的应用程序时,我得到了这个众所周知的错误:
addNumbers()来自 lib_2 的函数中,未定义的引用getNumber()

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

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

标签: c++cmakelinker-errorsstatic-linking

解决方案


因此,正如人们在评论中看到的那样,解决方案是具有静态链接库的正确顺序:

add_executable(app my_source_files )
target_link_libraries(app lib_2 lib_1)

推荐阅读