當前位置:編程學習大全網 - 網站源碼 - 如何使用cmake生成基於靜態庫的動態鏈接庫

如何使用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中

)

  • 上一篇:咬合力的介紹
  • 下一篇:如何改變tt語音頭像?
  • copyright 2024編程學習大全網