我几个小时都在看我的问题,我被困住了...
我有一个库 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链接吗?
答案 0 :(得分:0)
正如人们在评论中所见,解决方案是使静态链接库具有正确的顺序:
add_executable(app my_source_files )
target_link_libraries(app lib_2 lib_1)