gpt4 book ai didi

c - 使用 CMake 将共享库与静态链接起来

转载 作者:太空狗 更新时间:2023-10-29 15:00:44 30 4
gpt4 key购买 nike

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)

我在这里所做的是否正确。我不想将可执行文件与静态库链接起来。只是一个共享库,因为它是我将在其中调用函数的包装器。

如果我在制作可执行文件时链接所有静态库,它确实链接正常,但这不是我想要的结果。

非常感谢您的任何建议,

最佳答案

我尝试测试我的解决方案,但您的 CMakeLists.txt 对我来说没有任何更改。不过,看看这个问题: Include static lib in dynamic lib ,看来你应该试试

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

(滚动到最后,这是一条长线)

关于c - 使用 CMake 将共享库与静态链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141383/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com