簡體   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