2016-03-08 24 views
0

我已經建立了一個共享庫,並通過CMake(2.8)項目與共享庫和測試應用程序使用的lib

現在一個測試程序,make install後,我得到一棵樹是這樣的:

root/ 
    lib/ 
    mylib.so 
    samples/ 
    test1 
    test2 
    ... 

現在,當我跑我的test的應用程序,它無法找到共享庫文件來運行:

error while loading shared libraries: mylib.so: cannot open shared object file: No such file or directory 

我該如何解決這個問題?

編輯

這裏是我的CMakeLists.txt

相關的部分爲mylib

add_library(mylib SHARED ${LIB_SOURCES}) 
target_link_libraries(mylib ${VTK_LIBRARIES} ${OpenCV_LIBS}) 


install(TARGETS mylib DESTINATION lib) 
install(FILES include/mylib.h DESTINATION include) 
install(DIRECTORY models DESTINATION .) 

add_subdirectory(samples) 

對於可執行文件的文件夾:

file(GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) 

foreach(samplesourcefile ${APP_SOURCES}) 

    string(REPLACE ".cpp" "" samplename ${samplesourcefile}) 
    add_executable(${samplename} ${samplesourcefile}) 
    target_link_libraries(${samplename} mylib) 

    install(TARGETS ${samplename} DESTINATION samples) 

endforeach(samplesourcefile) 
+1

你能展示你的相關部分CMakeLists.txt嗎? – hetepeperfan

+0

@hetepeperfan做:) – manatttta

+0

嗯,我不知道如果我正確。但'target_link_libraries($ {samplename} mylib)'不屬於foreach循環。您只需鏈接一次。所以我會盡量讓它脫離循環,但我不確定這是否能解決您的問題。我認爲安裝線也是如此。 – hetepeperfan

回答

0

這可能是造成的原因您的庫安裝在Linux操作系統的非默認目錄中。 文件/etc/ld.so.conf包含動態加載器用於在Linux中搜索共享庫的目錄,請參閱ldconfig聯機幫助頁。 您可以隨時檢查命令ldd是否找到像測試應用程序這樣的動態鏈接可執行文件的所有共享依賴項。

因此,解決您的缺失庫問題的方法是將您的庫安裝在您的系統用作查找共享庫的搜索路徑的目錄下。 在Linux發行版中安裝開發共享庫的適當位置是/usr/local/lib;在所有Linux中默認情況下,這幾乎肯定包含在共享庫的搜索路徑中。同樣,像測試應用程序這樣的開發二進制文件最好放在/usr/local/bin之下(但是在其他地方並不是引起缺少lib問題的原因)。

爲了記錄在案,這裏遵循與記錄了The Linux Documentation Project/usr/local的摘錄:

[...] '的/ usr' 的拷貝它的結構。這幾天,'/ usr/local'被廣泛認爲是保留 自編或第三方程序的好地方。在本地安裝軟件時,系統管理員使用/ usr/local層次結構爲 。當系統軟件更新爲 時,它 需要被安全覆蓋。它可以用於在一組主機中共享 但在/ usr中找不到的程序和數據。本地安裝的 軟件必須放置在/ usr/local而不是/ usr中,除非安裝了 以替換或升級/ usr中的軟件。

相關問題