c++ - sistema - ¿Cómo forzar al vinculador a usar una biblioteca compartida en lugar de una biblioteca estática?
que es una libreria en programacion (2)
Esta es una cita del libro de programación de Linux:
% gcc -o app app.o -L. –ltest
Supongamos que tanto libtest.a
como libtest.so
están disponibles. libtest.so
, el vinculador debe elegir una de las bibliotecas y no la otra. El vinculador busca en cada directorio (primero aquellos especificados con las opciones -L
y luego aquellos en los directorios estándar). Cuando el enlazador encuentra un directorio que contiene libtest.a
o libtest.so
, el enlazador detiene los directorios de búsqueda. Si solo una de las dos variantes está presente en el directorio, el enlazador elige esa variante. De lo contrario, el enlazador elige la versión de la biblioteca compartida, a menos que indique explícitamente lo contrario. Puede utilizar la opción -static
para exigir archivos estáticos. Por ejemplo, la siguiente línea utilizará el archivo libtest.a
, incluso si la biblioteca compartida libtest.so
también está disponible:
% gcc -static -o app app.o -L. –ltest
Ya que si el enlazador encuentra el directorio que contiene libtest.a
, detiene la búsqueda y usa esa biblioteca estática, ¿cómo forzar al enlazador a buscar solo la biblioteca compartida y no la estática?
% gcc -o app app.o -L. libtest.so
% gcc -o app app.o -L. libtest.so
?
Podría usar la opción -l
en su forma -l:filename
si su enlazador lo admite (las versiones anteriores de ld
no lo hicieron)
gcc -o app app.o -L. -l:libtest.so
Otra opción es usar el nombre de archivo directamente sin -l
y -L
gcc -o app app.o /path/to/library/libtest.so
del hombre:
-shared-libgcc
-static-libgcc
En los sistemas que proporcionan libgcc como una biblioteca compartida, estas opciones obligan al uso de la versión compartida o estática, respectivamente. Si no se construyó una versión compartida de libgcc cuando se configuró el compilador, estas opciones no tienen efecto.
buena suerte