![](/img/trans.png)
[英]Cannot find C++ library when linking, error compliling the `boost::program_options` example
[英]Cannot find library with simple C++ example
我正在使用cmake在Ubuntu中構建一個名為alpha
的C ++庫,其中包含一個源文件:
cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_library (alpha alpha.cpp)
這將創建一個名為libalpha.a
的文件,現在我想鏈接到該文件。 因此,我將其復制到另一個名為beta
C ++項目的源目錄中,該項目還包含一個源文件:
cmake_minimum_required(VERSION 2.8)
project(Beta)
add_executable(beta beta.cpp)
target_link_libraries(beta alpha)
但是,出現以下錯誤:
/usr/bin/ld: cannot find -lalpha
如果使用該行,也會發生相同的事情:
target_link_libraries(beta libalpha.a)
為什么beta
無法找到alpha
庫?
如果您希望完全分別構建庫和程序,則必須使用導入的target 。 當您嘗試將可執行文件鏈接到“完全未知”的庫時,CMake構建系統會自動將查找庫的任務傳遞給鏈接器,只需添加-lalpha
選項即可。 當鏈接器遇到該選項時,它將嘗試在標准庫位置之一(即/usr/lib/
, /usr/local/lib
等)中定位libalpha.so並預期失敗。 您可以使用libalpha.a
的絕對路徑: libalpha.a
target_link_libraries(beta /path/to/libalpha.a)
。
但是,如果您可以一起構建事物,則可以大大簡化任務。 考慮
<項目> /CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
Project(Test)
add_subdirectory(alpha)
add_subdirectory(beta)
<項目> /alpha/CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)
project(alpha)
set(SOURCES alpha.c)
add_library(alpha ${SOURCES})
target_include_directories(
alpha INTERFACE
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
)
要自動將libalpha包含目錄添加到所有后來與libalpha鏈接的組件,需要使用target_include_directories()
及其復雜的表達式。
<項目> /beta/CMakeLists.txt
project(beta)
set(SOURCES beta.c)
add_executable(beta ${SOURCES})
target_link_libraries(beta alpha)
將此行與alpha-library的路徑一起添加。
link_directories( <library path> )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.