【发布时间】:2021-05-17 23:57:07
【问题描述】:
我正在尝试使用 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)
但这会在链接器命令的目标文件之前添加库标志,这会导致ordering the linker arguments 出现其他问题
【问题讨论】:
-
请在问题帖子中添加确切的错误消息。
-
src1.c:(.text+0x3c): undefined reference to `some_function' collect2: error: ld returned 1 exit status
-
错误“未定义的引用”只能在链接可执行文件或共享库时发出。 OBJECT 库的创建不涉及链接,因此它不会发出给定的错误。请提供您的案例更详细的描述。
-
正确,当我想将 input_output 链接到可执行目标时会出现问题:
add_executable(my_app app/main_app.c) target_link_libraries(my_app input_output)