Gcc 将静态库链接到cmake中的对象

Gcc 将静态库链接到cmake中的对象,gcc,cmake,Gcc,Cmake,我正在尝试使用cmake编译一个项目。我需要在src1.c中使用外部静态库,因此我使用target\u link\u libraries将其链接到目标文件。但是,我收到一些关于src1.c中缺少函数的投诉,这些函数应该在外部库中 add_library(input_output OBJECT src/src1.c src/src2.c src/src3.c) find_library(EXTERNAL_LIB NAMES libexternall

我正在尝试使用cmake编译一个项目。我需要在
src1.c
中使用外部静态库,因此我使用
target\u link\u 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:我还将外部库直接添加到linker命令中

add_compile_options(-Wall -Wextra --std=c99 -L~/lib -lexternallib)
add_link_options(-L~/lib -lexternallib)

但是这在linker命令的对象文件之前添加了库标志,这导致了

的一些其他问题这里很难说您的错误的真正原因,但我将尝试一下

首先,您不需要使用add\u compile\u选项或add\u link\u选项手动链接。cmake命令target\u link\u库正在为您执行此操作

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

e、 g:


请在问题帖子中添加准确的错误消息。src1.c:(.text+0x3c):对“some_function”集合的未定义引用2:错误:ld返回1退出状态错误“未定义引用”只能在链接可执行文件或共享库时发出。对象库的创建不涉及链接,所以它不能发出给定的错误。请提供您案例的更详细描述。正确,当我想将输入输出链接到可执行目标时会出现问题:
add\u executable(my\u app app/main\u app.c)target\u link\u libraries(my\u app input\u output)
我添加了头文件,问题实际上不是编译!主要问题是链接器
target_include_directories(input_output PRIVATE /path/to/external_library_header)