zoukankan      html  css  js  c++  java
  • 如何使用cmake生成基于静态库的动态链接库

    在工程搭建时,可能会有将静态库链接成动态库的需求,如出于代码保护的角度,某些模块会发布.a扩展名的静态库,我们要将多个这样的静态库链接成一个动态库。但与直接link目标文件不同的是,ld以默认参数执行时,并把静态库中没有用到的函数过滤掉,导致生成的so并未包含所要的函数,因此要加上--whole-archive参数,以保证所有的函数都包含在生成的so中。

        在使用cmake时,CMakeLists.txt的写法如下:

    add_library(
        ${MODULE_NAME}
        SHARED
        ${CMAKE_SOURCE_DIR}/builttime.c #要生成一个so,至少要包含一个源文件,实在没有可以把库的编译时间戳打到这儿。
    )

    target_link_libraries(
        ${MODULE_NAME}
        ${${MODULE_NAME}_EXTRA_LDFLAGS}
        "-Wl,--whole-archive" #告诉编译器,从这里开始,所有的库的内容都包含到so中
        ${LOCAL_MODULES} #可以是以源代码生成的静态库
        ${PREBUILT_MODULES} #可以是预先生成的静态库
        "-Wl,--no-whole-archive" #告诉编译器,从这里开始,以后的库的内容不用都包含到so中
    )

  • 相关阅读:
    JDBC操作MySQL
    MySQL-SQL语句
    MySQL-环境安装、配置、卸载、系统介绍
    JavaSE-单元测试、反射、注解
    JavaSE-Stream、方法引用
    JavaSE-函数式编程接口
    JavaSE-网络编程
    Document
    Document
    Document
  • 原文地址:https://www.cnblogs.com/lidabo/p/13846772.html
Copyright © 2011-2022 走看看