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 命令时,由于它需要静态库,因此链接失败。目的是为静态库创建一个包装器,这样可执行文件只需链接一个共享库。由于我正在将共享库与静态库链接,因此静态库将自动成为共享库源代码的一部分。
以下是简短的代码片段。 在我的 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)
我在这里做的是否正确。我不想将可执行文件与静态库链接,只需使用单个共享库作为我的包装器,我将在其中调用函数。
如果在生成可执行文件时链接所有静态库,则可以正常链接,但这不是我想要的结果。
非常感谢任何建议,