![](/img/trans.png)
[英]Conan + CMake + C++ : Linking against Boost.Log static library fails
[英]cmake: linking against STATIC IMPORTED library fails
我有供應商提供的靜態庫。
我已將其添加為STATIC IMPORTED
庫目標,並在目標上設置了屬性:
add_library(
lime_api
STATIC
IMPORTED
)
set_target_properties(
lime_api
PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/trading/limeTradingApi.a"
)
# users include "api/trading/limeTradingApi.h"
set_target_properties(
lime_api
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/.."
)
我嘗試在源代碼樹的其他位置鏈接到lime_api
,但出現錯誤:
/usr/bin/ld: cannot find -llime_api
我的源代碼樹如下所示:
src
|
+--- api
| |
| +--- trading
| | - limeTradingApi.a
| | - limeTradingApi.h
| |
| +--- examples
| |
| +--- trading
|
+--- order
|
+--- example
奇怪的是,有一個供應商提供的示例可以鏈接到該庫,並且運行良好:
api/examples/trading/CMakeLists.txt
:
add_executable (trading_demo exampleClient.cc)
target_link_libraries(trading_demo lime_api) <-- this works
但是,當我嘗試鏈接到我自己的包含lime_api
的庫時,出現鏈接器錯誤。
order/CMakeLists.txt
:
add_library(
order
STATIC
${SRCS}
)
target_link_libraries(order lime_api) <-- this doesn't work
order/example/CMakeLists.txt
:
add_executable (order_example main.cpp)
target_link_libraries(order_example order)
為什么CMake不將鏈接的目標lime_api
“轉換”為我的可執行文件的-llimeTradingApi.a
?
我懷疑你遇到了可視性問題與IMPORTED
庫目標。 根據文檔 :
An IMPORTED library target references a library file located outside the
project. ... The target name has scope in the directory in which it is
created and below, but the GLOBAL option extends visibility.
這就是為什么正確的庫路徑用於內部trading_demo
目標,而不用於外部order_example
目標的原因。 要解決此問題,添加GLOBAL
選項就足夠了:
add_library(lime_api STATIC IMPORTED GLOBAL)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.