繁体   English   中英

如何正确链接到 CMake 中的库(使用 Boehm GC)?

[英]How to properly link to libraries in CMake (using Boehm GC)?

我一直在尝试解决这个问题,但似乎无法让它发挥作用。 我已经检查了一堆帖子。

我有一个 static 库 libRuntime.a,生成如下:

cmake_minimum_required(VERSION 3.15)
project(Runtime)

set(CMAKE_CXX_STANDARD 17)

add_library(Runtime library.cpp)
find_library(GC gc)
message(${GC})
target_link_libraries(Runtime PUBLIC ${GC})

library.cpp 使用 Boehm GC,这就是为什么我还将它与我的Runtime目标链接。

现在,我想从我的 libRuntime.a 中调用函数,所以我有以下其他 CMake 项目:

cmake_minimum_required(VERSION 3.15)
project(test)

set(CMAKE_CXX_STANDARD 17)

add_executable(test main.cpp)
find_library(TESTLIB Runtime lib)
message(${TESTLIB})
target_link_libraries(test ${TESTLIB})

我已将 library.h 粘贴到项目中,并将 libRuntime.a 粘贴到名为lib的目录中,因此定义是已知的并找到了库。 从我的运行时库调用函数现在给了我:

/path.../Scheme-Compiler/Runtime/library.cpp:12: undefined reference to `GC_init'
/usr/bin/ld: ../lib/libRuntime.a(library.cpp.o): in function `alloc_atom':

提前致谢

因为您使用单独的 CMake 调用来创建可执行文件,所以您的第一个项目的Runtime CMake 目标的属性是未知的。 具体来说, CMake 不会知道任何Runtime库的依赖项(即GC ),因此在将Runtime时链接到可执行文件时必须明确列出它们:

cmake_minimum_required(VERSION 3.15)
project(test)

set(CMAKE_CXX_STANDARD 17)

add_executable(test main.cpp)
find_library(TESTLIB Runtime lib)
message(${TESTLIB})

# Find GC library.
find_library(GC gc)
# Link GC here, along with the Runtime library.
target_link_libraries(test PRIVATE ${GC} ${TESTLIB})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM