Hice un poco de investigación y aunque no pude encontrar una solución satisfactoria al problema, encontré una solución a medias.
El problema de la electricidad estática se acumula se reduce a 3 cosas:
construcción y la vinculación de bibliotecas internas del proyecto.
Bastante simple, uno solo tiene que voltear el BUILD_SHARED_LIBS
, interruptor .
Encontrar versiones estáticas de bibliotecas externas.
La única forma parece ser configurar CMAKE_FIND_LIBRARY_SUFFIXES
para contener el (los) sufijo (s) del archivo deseado (es una lista de prioridades).
Esta solución es bastante "sucia" y va en contra de las aspiraciones multiplataforma de CMake. En mi humilde opinión, esto debería ser manejado por CMake detrás de las escenas, pero por lo que yo entendí, debido a la confusión ".lib" en Windows, parece que los desarrolladores de CMake prefieren la implementación actual.
Vinculación estática con las bibliotecas del sistema.
CMake proporciona una opción LINK_SEARCH_END_STATIC
cuales basa en la documentación: "Finalizar una línea de enlace de tal manera que se utilizan las bibliotecas del sistema estáticas." Uno pensaría, esto es, el problema está resuelto. Sin embargo, parece que la implementación actual no está a la altura de la tarea. Si la opción está activada, CMake genera una llamada de vinculador implícita con una lista de argumentos que termina con las opciones pasaron al enlazador, incluyendo -Wl,-Bstatic
. Sin embargo, esto no es suficiente. Solo instruir al enlazador para que se enlace estáticamente resulta en un error, en mi caso: /usr/bin/ld: cannot find -lgcc_s
. Lo que falta es decirle a gcc que necesitamos enlaces estáticos a través del -static
argumento que es no generó al llamado enlazador por CMake. creo que esto es un error, pero no han logrado obtener una confirmación por parte de los desarrolladores todavía.
por último, creo que todo esto puede y debe ser hecho por CMake detrás de escena, después de todo, no es tan complicado, excepto que es imposible en Windows, si eso cuenta como complicado ...
No es una estafa de: http://stackoverflow.com/questions/2113231/making-cmake-choose-static -linkage-when-possible, que es específico de GCC. –
De hecho, no solo es específico de gcc, también es una solución inconveniente. Ver mi comentario en la otra pregunta. – pszilard
@pszilard ¿Ha encontrado finalmente la solución? Estoy tratando de hacer lo mismo con g ++. – augustin