Cómo usar cmake para generar una biblioteca de enlaces dinámicos basada en una biblioteca estática
Al construir un proyecto, puede ser necesario vincular bibliotecas estáticas a bibliotecas dinámicas. Por ejemplo, desde la perspectiva de la protección del código, algunos módulos publicarán bibliotecas estáticas con una extensión .a. convertir múltiples Una biblioteca estática de este tipo está vinculada a una biblioteca dinámica. Sin embargo, a diferencia de vincular directamente el archivo de destino, cuando ld se ejecuta con parámetros predeterminados, filtra las funciones que no se utilizan en la biblioteca estática. Como resultado, el archivo generado no contiene las funciones requeridas, por lo que
<. Se debe agregar el parámetro p>--whole-archive para garantizar que todas las funciones estén incluidas en el archivo generado.Cuando se usa cmake, CMakeLists.txt se escribe de la siguiente manera:
add_library(
${MODULE_NAME}
COMPARTIDO
${CMAKE_SOURCE_DIR}/builttime.c #Para generar un archivo fuente, se debe incluir al menos un archivo fuente. No hay forma de poner la marca de tiempo de compilación de la biblioteca aquí
)
target_link_libraries(
${MODULE_NAME}
${${MODULE_NAME}_EXTRA_LDFLAGS}
"-Wl, --whole-archive" # dígale al compilador que, de ahora en adelante, todo el contenido de la biblioteca se incluye en
${LOCAL_MODULES} #Puede ser una biblioteca estática generada a partir del código fuente
${PREBUILT_MODULES} # Puede ser una biblioteca estática pregenerada
"-Wl, --no-whole-archive" #Dígale al compilador que de aquí en adelante, no es necesario incluir el contenido de las bibliotecas futuras en él p>
)