2010-11-29 78 views
3

我想在我的項目中使用CUDPP庫。我已經從project page下載了源代碼。不幸的是,當我運行「make」時,只有靜態庫構建。我查看了Makefile文件並沒有找到任何動態庫配置。我不想在項目中保留靜態庫 - 這是完全不可移植的方式。CUDA CUDPP .so建築

我的問題是:我如何構建.so動態庫CUDPP,而無需編寫自己的Makefile /手動編譯它?也許有人已經做到了?

編輯:我已經改爲 「G ++」 與 「G ++ -fPIC」, 「海灣」 與 「GCC -fPIC」 和 「NVCC」 與 「NVCC -Xcompiler -fpic」。當我從檔案中解壓obj文件,並將它們鏈接到共享庫時,我沒有錯誤。但是,我的應用程序在與此庫鏈接時開始崩潰。

回答

3

當你編譯通過標誌-Xcompiler -fpic到nvcc。如果您鏈接到任何cuda庫,請確保您已鏈接到共享庫,否則無法鏈接它。希望這就是你所需要的。

+0

我將這些添加到nvcc並將-fPIC添加到gcc/g ++。當我從.a中提取文件並鏈接它們(g ++ -shared * _o -o libcudpp.so)時,它不會給出任何錯誤。但是,當我嘗試運行與.so鏈接的應用程序時,應用程序崩潰(加載此庫時gdb說)。我錯過了什麼? – x13n 2010-12-01 18:20:49

+0

我認爲你必須用-Xcopmiler -fpic標誌來重新編譯你使用的任何靜態庫中的所有庫。您不能從靜態庫中提取它們,然後將它們重新鏈接爲共享,因爲其中的對象從未使用-fpic標誌進行編譯。我很確定sdk或其他一些cuda庫已經有可用的共享庫(.so)。如果沒有,我認爲你可以用-fpic標誌從源代碼重新編譯cuda庫(我沒有這樣做,但我相信它可以完成)。 – Marm0t 2010-12-01 19:43:32

0

您是否還在使用-shared來創建庫?如果工作正常,則不需要從存檔中提取任何內容。

如果您在可執行文件上運行ldd,它會顯示應用程序需要什麼動態鏈接,您可以檢查-fPIC等工作是否正常。還要確保.so圖書館在你的LD_LIBRARY_PATH(對不起,如果這是顯而易見的,檢查沒有傷害)。