Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 静态链接依赖项_Linux_Gcc_Linker_Static Libraries - Fatal编程技术网

Linux 静态链接依赖项

Linux 静态链接依赖项,linux,gcc,linker,static-libraries,Linux,Gcc,Linker,Static Libraries,我正在尝试构建一个应用程序,它与一组静态库和共享库相链接。这是通过以下命令完成的: arif@khost:~/sak/pjsip$ gcc -v -o /home/arif/pjsip-samples/sample_apps/playfile.out pjsip-apps/src/samples/playfile.o `pkg-config --libs libpjproject` 其中pkg配置--libs libpjproject弹出: arif@khost:~/sak/pjsip

我正在尝试构建一个应用程序,它与一组静态库和共享库相链接。这是通过以下命令完成的:

arif@khost:~/sak/pjsip$ gcc -v -o /home/arif/pjsip-samples/sample_apps/playfile.out pjsip-apps/src/samples/playfile.o `pkg-config --libs libpjproject`
其中
pkg配置--libs libpjproject
弹出:

    arif@khost:~/sak/pjsip$ pkg-config --libs libpjproject
    -pthread -L/opt/pjsip/lib -L/opt/ffmpeg/lib -lpjmedia-videodev-x86_64-unknown-linux-gnu -lpjmedia-audiodev-x86_64-unknown-linux-gnu -lpjmedia-x86_64-unknown-linux-gnu
............(other libraries are omitted) 
有关图书馆包括 [1]
pjmedia audiodev
[2] “pjmedia

此处报告的链接错误:

/opt/pjsip/lib/libpjmedia-x86_64-unknown-linux-gnu.a(endpoint.o): In function `pjmedia_endpt_create':
endpoint.c:(.text+0x14f): undefined reference to `pjmedia_aud_subsys_init'
endpoint.c:(.text+0x1b0): undefined reference to `pjmedia_aud_subsys_shutdown'(etc)
现在情况不应该如此,因为:

arif@khost:~/sak/pjsip$ nm /opt/pjsip/lib/libpjmedia-x86_64-unknown-linux-gnu.a | grep pjmedia_aud_subsys
                 U pjmedia_aud_subsys_init
                 U pjmedia_aud_subsys_shutdown
                 U pjmedia_aud_subsys_get_pool_factory
                 U pjmedia_aud_subsys_init
                 U pjmedia_aud_subsys_shutdown

`
我知道,链接顺序对于共享库非常重要,我认为不应该是这样,因为我们正在复制对象文件

我错过什么了吗

更新1

糟糕,符号不在pjmedia中,而是在pjmedia auddev中:

arif@khost:/opt/pjsip/lib$ nm -C libpjmedia-audiodev-x86_64-unknown-linux-gnu.a | grep pjmedia_aud_subsys_init
0000000000000720 T pjmedia_aud_subsys_init
所以这里有一个明显的顺序问题。因为
libpjmedia
使用
libpjmedia auddev
但在命令行中,它的顺序是错误的

如果我在
libpjmedia auddev
之前使用
libpjmedia
,问题就解决了

         U pjmedia_aud_subsys_init
此输出中的
U
表示符号未定义。在此库中定义时,此列输出应具有
t
t
,符号地址输出在左侧


您应该找到实际定义这些符号的库,并将其添加到命令行。

您需要-lpjmedia-x86_64-unknown-linux-gnu之前的-lpjmedia-videodev-x86_64-unknown-linux-gnu包含。

链接顺序对于静态库也很重要,更一般来说,几乎总是很重要的。。。