使用cmake生成基于静态库的动态链接库
2016-10-25 16:31
351 查看
在软件开发过程中,有时候需要基于静态库生成动态库文件。
ld执行时,默认会把静态库中不使用的函数过滤掉,导致生成的动态库文件不能包含所有的函数。所以需要配置ld的选项--whole-archive。
libsdk_api.a
SET(SRC_SDK_API sdk_api.c)
add_library(sdk_api STATIC ${SRC_SDK_API})
libsdk_dev.a
SET(SRC_SDK_DEV sdk_dev.c)
add_library(sdk_dev STATIC ${SRC_SDK_DEV})
libsdk_sys.a
SET(SRC_SDK_SYS sdk_memory.c)
add_library(sdk_sys STATIC ${SRC_SDK_SYS})
libsdk.so
add_subdirectory(api)
add_subdirectory(dev)
add_subdirectory(sys)
SET(SRC_SDK sdk_main.c)#生成动态库需要至少包含一个源文件
add_library(sdk SHARED ${SRC_SDK})
target_link_libraries(sdk
"-Wl,--whole-archive" #之后的库使用--whole-archive选项
sdk_api
sdk_dev
sdk_sys
"-Wl,--no-whole-archive") #之后的库不使用--whole-archive选项
ld执行时,默认会把静态库中不使用的函数过滤掉,导致生成的动态库文件不能包含所有的函数。所以需要配置ld的选项--whole-archive。
libsdk_api.a
SET(SRC_SDK_API sdk_api.c)
add_library(sdk_api STATIC ${SRC_SDK_API})
libsdk_dev.a
SET(SRC_SDK_DEV sdk_dev.c)
add_library(sdk_dev STATIC ${SRC_SDK_DEV})
libsdk_sys.a
SET(SRC_SDK_SYS sdk_memory.c)
add_library(sdk_sys STATIC ${SRC_SDK_SYS})
libsdk.so
add_subdirectory(api)
add_subdirectory(dev)
add_subdirectory(sys)
SET(SRC_SDK sdk_main.c)#生成动态库需要至少包含一个源文件
add_library(sdk SHARED ${SRC_SDK})
target_link_libraries(sdk
"-Wl,--whole-archive" #之后的库使用--whole-archive选项
sdk_api
sdk_dev
sdk_sys
"-Wl,--no-whole-archive") #之后的库不使用--whole-archive选项
相关文章推荐
- 如何使用cmake生成基于静态库的动态链接库
- Android下使用CMake链接已有静态库.a生成新的静态库.a,以及动态库.so链接静态库生成新的动态库.so
- Linux下的动态链接库与静态链接库的生成与使用
- 关于GCC中同时使用动态和静态库链接的操作参数和解释
- Linux下生成动态链接库是否必须使用 -fPIC 的问题
- cmake 添加头文件目录,链接动态、静态库
- 使用displaytag动态生成链接
- 转:关于GCC中同时使用动态和静态库链接的操作参数和解释
- “为了能够访问动态链接库中的位图资源,在编译动态链接库时,需要使用MFC静态库”
- [转]GCC中同时使用动态和静态库链接的参数解释
- C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)
- CMake 添加头文件目录,链接动态、静态库(添加子文件夹)
- 关于GCC中同时使用动态和静态库链接的操作参数和解释
- 使用DLL文件生成LIB文件实现动态链接
- cmake 添加头文件目录,链接动态、静态库
- Linux 静态链接库与动态链接库之二:动态链接库生成及使用
- GCC中同时使用动态和静态库链接的操作参数
- qt的动态链接库生成、使用,还夹带一些pro文件的使用。
- Linux-(C/C++)动态链接库生成以及使用(libxxx.so)
- 学习 gcc编译器使用3 生成动态链接