[英]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.