2014-07-25 27 views
4

cmake的鏈接共享庫,而無需使用我有以下的CMakeLists.txt完整路徑

set(PROJECT_LINK_LIBS lib1.so lib2.so) 
link_directories(path/to/libs) # lib1.so and lib2.so are there. 

add_library(${PROJECT_NAME} SHARED ${PROJECT_SOURCES}) 
target_link_libraries(${PROJECT_NAME} ${PROJECT_LINK_LIBS}) 

來編譯和鏈接的罰款。

但是當我做:

ldd -d mylib.so 

我得到:

  1. libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf529b000)
  2. linux-gate.so.1 => (0xf777a000)
  3. /lib/ld-linux.so.2 (0xf777b000)
  4. lib1.so => /path/to/libs/lib1.so (0xf56a2000)
  5. lib2.so => /path/to/libs/lib2.so (0xf548f000)

我的問題是:

  • 如何刪除/路徑/到/庫/供4和5?與LD_LIBRARY_PATH有關嗎?
  • 自動回答:我得到了什麼意思1.在該路徑中搜索libc.so.6。但是2和3呢? locate linux-gate.so.1什麼都不給。爲什麼3.沒有=>符號? (發現答案0​​)

回答

2

好找到了答案:

set(CMAKE_SKIP_BUILD_RPATH true) 

這做到了。

0

您是否有實際問題,或者只是與ldd的輸出相混淆?回答你的問題:如果你在Linux上成功地編譯並鏈接你的庫,那麼你的外部庫的完整路徑將被存儲。如果您現在複製或安裝(使用CMake)庫,完整的庫路徑將被刪除。現在,你必須確保LD_LIBRARY_PATH提供了正確的路徑,或者外部庫駐留在你的庫所在的同一個文件夾中。

+1

問題是如何刪除硬編碼/路徑/到/ libs /並離開只有lib1.so/lib2.so才能使用LD_LIBRARY_PATH進行搜索。看看我的答案,解決它。現在,如何用CMake複製圖書館? – Borzh

+1

@Borzh我只是覺得你所看到的並不是真正的問題。你仍然是對的。你的回答將從一開始就刪除rpath條目。如果你想使用CMake複製你的庫,使用''FILE COPY''或''INSTALL''。 – ToniBig