簡體   English   中英

cmake:鏈接到STATIC IMPORTED庫失敗

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM