5
cmake 2.8
gcc (GCC) 4.8.1

編集 - - - - -

静的ライブラリをラップすることは、whole-archiveを除くすべてのライブラリで機能しますpjmedia-videodev。問題は、ビルドしようとすると次のエラーが発生することです。

cbar_factory_init': colorbar_dev.c:(.text+0x2a0): undefined reference to pjmedia_format_init_video'

こんにちは、

共有ライブラリを作成しましたが、そのライブラリを約 10 個の静的ライブラリにリンクする必要があります。次に、実行可能ファイルを共有ライブラリにリンクします。

私の質問は、静的ライブラリも必要とするため、make を実行するとリンクに失敗するということです。の目的は、静的ライブラリのラッパーを作成することです。したがって、実行可能ファイルは 1 つの共有ライブラリとリンクするだけで済みます。共有ライブラリをスタティックにリンクすると、スタティックは自動的に共有ライブラリのソース コードの一部になります。

sippnets のみをコーディングして短くします。共有ライブラリを作成し、静的ライブラリをリンクする私の CMakeLists.txt では:

add_library(app_module_sip SHARED app_module_sip_init.c)

 set(PJSIP_LIBRARIES
  g7221codec
  gsmcodec
  ilbccodec
  milenage
  pj
  pjlib-util
  pjmedia
  pjmedia-codec
  pjmedia-audiodev
  pjmedia-videodev
  pjnath
  pjsip
  pjsip-simple
  pjsip-ua
  pjsua
  portaudio
  resample
  speex
  srtp
)

target_link_libraries(app_module_sip pthread m uuid nsl rt asound crypto ssl ${PJSIP_LIBRARIES})

今、実行可能ファイルを作成する私の CMakeLists.txt

add_executable(app sip_test.c)

target_link_libraries(app app_module_sip)

これは私がここでやっていることは正しいですか。実行可能ファイルを静的ライブラリにリンクしたくありません。単一の共有ライブラリは、関数を呼び出すラッパーであるためです。

実行可能ファイルを作成するときにすべての静的ライブラリをリンクすると、リンクは問題ありませんが、それは私が望む結果ではありません。

ご提案いただきありがとうございます。

4

3 に答える 3

3

私は自分のソリューションをテストしようとしましたが、あなたの CMakeLists.txt は何も変更せずに機能しました。それでも、この質問を見ると: Include static lib in dynamic lib、試してみるべきだと思われます

target_link_libraries(app_module_sip ... ssl -Wl,-whole-archive ${PJSIP_LIBRARIES} -Wl,-no_whole-archive)

(最後までスクロールしてください。長い行です)

于 2013-10-04T00:29:16.723 に答える