【问题标题】:Static Linking dependencies静态链接依赖
【发布时间】:2013-11-11 12:20:34
【问题描述】:

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

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-config --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,问题就解决了。

【问题讨论】:

  • 链接顺序对于静态库也很重要,而且更普遍地说几乎总是很重要...

标签: linux gcc linker static-libraries


【解决方案1】:
         U pjmedia_aud_subsys_init

U 在此输出中表示符号未定义。当它在这个库中定义时,这一列输出应该有tT,符号的地址在左边输出。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      相关资源
      最近更新 更多