我已经尝试了一段时间,但似乎无法正常工作。我已经检查了很多帖子。
我有一个静态库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})