Tengo un montón de bibliotecas estáticas (* .a), y quiero construir una biblioteca compartida (* .a) para vincularlas con esas bibliotecas estáticas (* .a). ¿Cómo puedo hacerlo en gcc/g ++? ¡Gracias!¿Puedo construir una biblioteca compartida mediante el enlace de bibliotecas estáticas?
Respuesta
No entiendo por qué no pudo simplemente crear los archivos de su biblioteca dinámica en archivos .o y vincularlos;
gcc -shared *.o -lstaticlib1 -lstaticlib2 -o mylib.so
Lo que pasa es que puede omitir '* .o', si no las tiene – Lol4t0
Las bibliotecas estáticas solo incorporarán su código si se hace referencia a ellas, de todos modos, no puede omitir todas las' .o' – bdonlan
. que si hay varias instancias de la misma biblioteca estática en el mismo ejecutable (cargadas indirectamente a través de bibliotecas compartidas que contienen las librerías estáticas), pueden suceder cosas extrañas – bdonlan
Puede (simplemente extraer todos los archivos .o
y vincularlos con -shared
hacer una .so
), sino si funciona, y lo bien que funciona, depende de la plataforma y si la biblioteca estática fue compilado como código de posición independiente (PIC). En algunas plataformas (por ejemplo, x86_64), el código que no es de PIC no es válido en las bibliotecas compartidas y no funcionará (en realidad, creo que el vinculador se negará a hacer el .so
). En otras plataformas, el código que no es PIC funcionará en bibliotecas compartidas, pero la copia en memoria de la biblioteca no se puede compartir entre los diferentes programas que la usan o incluso instancias diferentes del mismo programa, por lo que resultará en ENORME pérdida de memoria.
¡Gracias por esta respuesta tan útil! Supongo que esta es la mejor explicación para este error al hacer esto en x86_64: 'la reubicación R_X86_64_32S contra 'g_gGlobalVariable' no se puede usar cuando se hace un objeto compartido; recompilar con -fPIC ' – dashesy
- 1. ¿Es posible construir una biblioteca compartida con la biblioteca usada de enlace estático?
- 2. Vinculación de una biblioteca compartida mediante gcc
- 3. CMake: ¿cómo crear una sola biblioteca compartida desde todas las bibliotecas estáticas de subproyectos?
- 4. Crear bibliotecas estáticas y compartidas de C++
- 5. bibliotecas estáticas
- 6. bibliotecas Ejecución de una biblioteca compartida en Unix
- 7. ¿Cómo uso waf para construir una biblioteca compartida?
- 8. ctypes para bibliotecas estáticas?
- 9. fusionar bibliotecas estáticas en una sola
- 10. Vinculación a bibliotecas estáticas
- 11. Combinar bibliotecas estáticas
- 12. Compilar una biblioteca compartida estáticamente
- 13. Mezcla de bibliotecas estáticas y bibliotecas compartidas
- 14. Vinculación de dependencias de una biblioteca compartida
- 15. ¿Cómo puedo forzar el enlace con una biblioteca estática cuando hay una biblioteca compartida del mismo nombre?
- 16. El equivalente .NET de bibliotecas estáticas?
- 17. Cómo fusionar dos bibliotecas estáticas "ar" en una
- 18. Biblioteca compartida dinámica de C++ en Linux
- 19. ¿Cómo construir una biblioteca compartida (.so) sin rutas de dependencia completas codificadas?
- 20. ¿Construyendo bibliotecas estáticas en Mac usando CMake y GCC?
- 21. enlace estático de la función de biblioteca compartida en gcc
- 22. Práctica recomendada para dependencias de bibliotecas estáticas
- 23. Conflictos de símbolos de bibliotecas estáticas y compartidas?
- 24. Cómo exportar símbolos de una biblioteca compartida
- 25. ¿Qué bibliotecas puedo usar para construir una GUI con Erlang?
- 26. iPhone - Bibliotecas estáticas, propósito de "Copiar encabezados"?
- 27. ¿Por qué los símbolos de una biblioteca compartida no se resuelven en el momento del enlace?
- 28. Biblioteca de pantalla compartida
- 29. Crear biblioteca compartida que se vincula a otra biblioteca compartida no estándar
- 30. Tiempo de carga para bibliotecas compartidas vs bibliotecas estáticas
.a no es una biblioteca compartida. ¿Puedes dar un ejemplo de lo que estás tratando de hacer? – bdonlan