gcc - 将静态库链接到 cmake 中的对象
问题描述
我正在尝试使用 cmake 编译一个项目。我需要使用一个外部静态库,src1.c
所以我target_link_libraries
将它链接到目标文件。但是,我收到一些关于缺少src1.c
应该在外部库中的函数的抱怨。
add_library(input_output OBJECT
src/src1.c
src/src2.c
src/src3.c)
find_library(EXTERNAL_LIB NAMES libexternallib.a PATHS ~/lib)
target_link_libraries(input_output PRIVATE
"${EXTERNAL_LIB}")
所以我不确定此时我应该做什么。至少逻辑听起来是对的
UPDATE1:我还将外部库直接添加到链接器命令中
add_compile_options(-Wall -Wextra --std=c99 -L~/lib -lexternallib)
add_link_options(-L~/lib -lexternallib)
但这会在链接器命令的目标文件之前添加库标志,这会导致对链接器参数进行排序时出现其他一些问题
解决方案
很难说你的错误的真正原因是什么,但我会试一试。
首先,您不需要使用 add_compile_options 或 add_link_options 手动链接。cmake 命令 target_link_libraries 正在为您执行此操作。
我可以想象,由于缺少函数,您需要从依赖项中添加一个标头包含目录。
例如:
target_include_directories(input_output PRIVATE /path/to/external_library_header)
推荐阅读
- javascript - JavaScript 获取本地 json 文件
- python - Python 猜数字
- flutter - 如何通过未来
>> 函数作为 Widget 的参数? - python - Pip 命令 - 未找到,但有类似的
- javascript - 提高灯塔性能得分
- c# - AuthorizationHandlerContext 身份服务器 4 JWT 中无法访问自定义声明
- python - 抓取多个 URL 时,我在 Python 中的 Scrapy 代码不一致
- android - microSD卡上Extremal Storage上的应用程序拥有的文件/媒体文件夹:打开失败:EROFS(只读文件系统)
- php - 获取包含文件的真实路径
- hamiltonian-cycle - 在没有汉密尔顿路径可以使汉密尔顿循环的例子中