2014-10-10 76 views
1

我正在使用NSight Eclipse來創建CUDA加速類的類庫,這些類有意被第三方應用程序擴展和使用。讓我們打電話給我的項目'foo'。我想通過在單獨項目中編寫第三方應用程序來測試foo,包括我的測試應用程序並運行它。但是,當我這樣做時,測試應用程序無法找到foo共享庫文件。Nsight Eclipse無法找到共享庫

我已將測試項目的包含路徑設置到我的foo的src目錄,測試應用程序正在請求正確的庫名稱,並且foo/Debug的路徑是正確的。我根據this posting中的說明,基於我的過程。

我已驗證foo正在生成共享庫工件,並檢查了-fPIC標誌。

我可以編譯兩個項目,所以會出現設置是否確實是正確的,但是當我真正嘗試運行該測試項目中,我得到的消息「錯誤而載入共享庫:foo.so:無法打開共享對象文件:沒有這樣的文件或目錄「。但是當我看着foo/Debug目錄時,我可以在那裏看到文件libfoo.so。

我已經嘗試將foo更改爲靜態庫,但是會產生相同的錯誤消息。

這是怎麼回事,我該怎麼辦才能修復它?

感謝您的幫助。

回答

1

不幸的是,更改LD_LIBRARY_PATH對問題沒有影響。這可能會使操作系統意識到額外的位置,但不是NSight。

什麼結束了我的工作是在項目的根目錄中添加一個符號鏈接到共享庫。即ln -s ~/path/to/foo.so foo.so,現在foo.so可以直接用於我的項目,即使我稍後重新編譯foo。

這仍然有點像黑客,但至少我可以繼續發展...

2

Linux通常不會加載用戶創建的共享庫,除非該庫位於LD_LIBRARY_PATH環境變量中包含的路徑上。

將有問題的庫路徑添加到您的LD_LIBRARY_PATH環境變量中以解決此問題。

使用bash/sh的,您可以:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/my/library.so 

在這一點上,作爲一個測試,運行命令行程序。它現在應該找到圖書館。

然後你可以啓動Nsight EE,它也應該可以找到它。

這並沒有太大的意義:

我試圖改變富是一個靜態庫太多,但能產生同樣的錯誤消息。

靜態庫永遠不會動態加載,即使它在「正確」路徑上。