【发布时间】:2019-05-07 02:18:48
【问题描述】:
我正在研究我的问题几个小时,但我被困住了......
我有一个库 lib_1,其函数为 getNumber()。
然后我有一个库 lib_2,其函数为 addNumbers()。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 吗?
【问题讨论】:
-
订单很重要!如果
lib_2依赖于lib_1,则链接时lib_2必须在之前lib_1。 -
“当我已经链接到 lib_2 时,我真的需要在我的应用程序中链接到 lib_1,而 lib_2 本身就是静态链接到 lib_1 的吗?” - 是的,你需要。与共享>库不同,静态库不包含有关链接库的信息。
-
Omfg,没想过要订购它们……谢谢,现在可以使用了……
标签: c++ cmake linker-errors static-linking