1

一連の静的および共有ライブラリに対してリンクされているアプリを構築しようとしています。これは次のコマンドで行われます:

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コマンドラインで but を使用libpjmedia-auddevすると、間違った順序で指定されるためです。

libpjmedia前に取れば問題は解決しlibpjmedia-auddevます。

4

2 に答える 2