【问题标题】:Cannot link portaudio library as a static library无法将 portaudio 库链接为静态库
【发布时间】:2012-04-17 01:04:08
【问题描述】:

我需要将库 (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

我需要静态链接所有的库,可以吗?

【问题讨论】:

    标签: gcc linker arm portaudio


    【解决方案1】:

    来自gcc linking options

    -静态

    在支持动态链接的系统上,这会阻止与 共享库。在其他系统上,此选项无效。

    在这里,您所有未定义的符号都在 libportaudio 库中,这是一个共享库,您通过指定 -static 来阻止链接到它,因此会出现错误。 gcc 在指定的库路径(/media/Data/lib/.libs)中找不到libportaudio 的静态版本

    为什么要静态链接该共享库?有什么具体原因吗?

    您可能想阅读本文以了解有关 gcc 如何处理 shared and static libraries. 的更多信息

    【讨论】:

    • 我想静态链接该共享库,因为我不想将它安装在目标系统中;这是因为文件系统不是持久的,我必须在每次启动时安装库。不知道能不能搞定,也许我得把库建成静态版本。
    • 我尝试了以下方法但没有结果:arm-none-linux-gnueabi-gcc -Wall -static -I../portaudio/include ../portaudio/lib/.libs/libportaudio.a prova.cpparm-none-linux-gnueabi-gcc -Wall -static -I../portaudio/include -L../portaudio/lib/.libs -lportaudio prova.cpp。带有 .a 扩展名的库位于“../portaudio/lib/.libs”目录中
    • 现在我以这种方式链接:/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: symbolic link to '../libportaudio.la' ../portaudio/lib/.libs/libportaudio.lai: libtool library file 。顺便说一句,我得到了相同的结果:|
    【解决方案2】:

    如果您已经从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”,它会产生一个持续几秒钟的正弦波。至少当我在 Yosemite 上进行测试时发生了这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      相关资源
      最近更新 更多