2013-05-30 86 views
1

我對C++的結構.so文件是這樣的:(動態鏈接庫).so文件的Linux

Folder 1 (.d and .o extention files) 
Folder 2 (.d and .o extention files) 
Folder 3 (.d and .o extention files) 
processsignal.so 
makefile 
objects 
sources... 

你們是否知道如何編譯和運行上面的文件,我想。所以編譯也跑生成文件中,但是它仍然是一個錯誤:

​​

編譯由G ++:

g++ libsignalProcessing.so 
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 
+0

擴展名爲.d的文件是什麼類型的文件? – Claudio

+0

processsignal.so是編譯程序的結果還是編譯程序所需的庫? – Claudio

+3

從你的問題,你不清楚哪些文件是你的,哪些是由別人提供的,哪些是由構建系統生成的,哪種構建系統等。顯然你正試圖構建一個可執行文件(不是一個庫,共享或靜態)並且沒有'main'功能,但是直到你澄清你在做什麼之後,才能真正說出如何解決它。哦,並提及你的編譯系統(是automake?還是cmake?或只是純手工編寫的makefile?) –

回答

0

如果要在程序中使用.so文件,則需要使用gcc編譯器的-l標誌。之前,你這樣做,你需要將LD_LIBRARY_PATH設置的。所以

例如位置,如果你在/ home有libsomelib.so /代碼目錄,然後設置LD_LIBRARY_PATH爲LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/code,然後export LD_LIBRARY_PATH。 用echo $LD_LIBRARY_PATH進行測試。它應該給圖書館的位置。

在你想使用這個。所以程序

然後,就 g++ -L ../code abc.cpp -lsomelib

我不知道在這裏你的產品代碼,但是這是在一般的,如果你的程序作爲庫,然後將其可能沒有入口點是main函數。