2012-04-03 63 views
2

我需要將庫(portaudio)鏈接爲靜態庫。當我這樣做無法將portaudio庫鏈接爲靜態庫

arm-none-linux-gnueabi-gcc -static -L/media/Data/lib/.libs -lportaudio prova.cpp 

連接失敗告訴我

/tmp/ccuoQi1J.o: In function `main': 
prova.cpp:(.text+0x190): undefined reference to `Pa_Initialize' 
prova.cpp:(.text+0x1bc): undefined reference to `Pa_GetDeviceCount' 
prova.cpp:(.text+0x1d8): undefined reference to `Pa_GetDeviceInfo' 
prova.cpp:(.text+0x248): undefined reference to `Pa_OpenDefaultStream' 
prova.cpp:(.text+0x27c): undefined reference to `Pa_CloseStream' 
prova.cpp:(.text+0x280): undefined reference to `Pa_Terminate' 
collect2: ld returned 1 exit status 

同時,沒有-static選項,聯沒有給出錯誤

arm-none-linux-gnueabi-g++ -L/media/Data/lib/.libs -lportaudio prova.cpp 

我需要靜態鏈接庫所有,是有可能嗎?

回答

2

gcc linking options

-static

在支持動態鏈接系統中,這防止與 共享庫鏈接。在其他系統上,此選項不起作用。

在這裏,你的所有未定義的符號是libportaudio庫,它是一個共享庫,你是阻止鏈接到它通過指定-static,因此錯誤。 gcc無法在指定的庫路徑中找到libportaudio的靜態版本(/media/Data/lib/.libs

爲什麼要靜態鏈接該共享庫?任何具體原因?

您可能需要閱讀此瞭解更多關於如何GCC對待shared and static libraries.

+0

我想靜態鏈接共享庫,因爲我不想將其安裝在目標系統中;這是因爲文件系統不是持久的,我將不得不在每次啓動時安裝庫。我不知道是否可以完成,也許我必須建立圖書館到一個靜態版本。 – gc5 2012-04-07 15:57:10

+0

我試過以下沒有結果: 'arm-none-linux-gnueabi-gcc -Wall -static -I ../ portaudio/include ../portaudio/lib/.libs/libportaudio.a prova.cpp ' 和 'arm-none-linux-gnueabi-gcc -Wall -static -I ../ portaudio/include -L ../ portaudio/lib/.libs -lportaudio prova.cpp' 。 擴展名爲.a的庫位於目錄「../portaudio/lib/.libs」 – gc5 2012-04-11 13:27:48

+0

現在我以這種方式鏈接:'/ home/francesco/Dropbox/poli/bi/not/ip/cross/arm -2007q3/bin/arm-none-linux-gnueabi-gcc -Wall -static -I/home/francesco/Dropbox/poli/bi/not/ip/portaudio/include -L/home/francesco/Dropbox/poli/bi /not/ip/portaudio/lib/.libs prova.cpp'。 portaudio/lib/.libs的內容爲'file ../portaudio/lib/.libs/* ../portaudio/lib/.libs/libportaudio.a:current ar archive ../portaudio/lib/.libs /libportaudio.la:符號鏈接到'../libportaudio.la' ../portaudio/lib/.libs/libportaudio.lai:libtool庫文件 '。順便說一句,我得到了同樣的結果:| – gc5 2012-04-11 13:44:17

0

如果從http://www.portaudio.com/download.html下載最新的源PA,並試圖庫靜態鏈接到OSX上他們的測試項目之一,請嘗試以下make命令(cd到你下載的portaudio文件夾的根在前):

gcc -Iinclude examples/paex_sine.c lib/.libs/libportaudio.a -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreServices 

這將產生一個程序「的a.out」,將產生幾秒鐘的正弦波。至少這是我在優勝美地上進行測試時發生的情況。