首页 > 解决方案 > 将静态库链接到 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)

但这会在链接器命令的目标文件之前添加库标志,这会导致对链接器参数进行排序时出现其他一些问题

标签: gcccmake

解决方案


很难说你的错误的真正原因是什么,但我会试一试。

首先,您不需要使用 add_compile_options 或 add_link_options 手动链接。cmake 命令 target_link_libraries 正在为您执行此操作。

我可以想象,由于缺少函数,您需要从依赖项中添加一个标头包含目录。

例如:

target_include_directories(input_output PRIVATE /path/to/external_library_header)

推荐阅读