c++ - 链接到本身链接到应用程序的库的库 -> 未定义的引用
问题描述
我正在研究我的问题几个小时,但我被困住了......
我有一个带有函数的库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 吗?
解决方案
因此,正如人们在评论中看到的那样,解决方案是具有静态链接库的正确顺序:
add_executable(app my_source_files )
target_link_libraries(app lib_2 lib_1)
推荐阅读
- sql - 我有这个问题,但我不知道如何回答“举两个不同粒度的例子。?
- python - 在修补程序中将条目初始化为 0
- python - sqlalchemy 一对多更新而不先选择
- haskell - haskell 中的简单评分功能不起作用
- javascript - Konva.js 可以识别 SHIFT+dblclick 吗?
- elasticsearch - 在 ElasticSearch 中删除旧 MetricBeats 数据的最佳实践
- javascript - 如何从数据库中获取日期但同时保留下拉日历?
- pandas - 熊猫读取具有不同数量字段的 csv 文件
- azure-cosmosdb - 如何在 CosmosDB 中使用 HAVING
- github - 如何解决无法访问特定 GitHub 集成的问题