Asegúrese de que los archivos de objeto en libmxml.a
fueron construidos con -fPIC
. Es necesario construir una biblioteca compartida. Consulte también http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Aquí hay un ejemplo rápido
$ cat stat.c
int five() { return 5; }
$ gcc -c stat.c -fPIC
$ ar crus libstat.a stat.o
$ cat dynamic.c
int ten() { return five() + five(); }
$ gcc -c dynamic.c -fPIC
$ gcc -shared -o libdyn.so dynamic.o -L. -lstat
$ ldd libdyn.so # Just to show static linkage to libstat.a
linux-vdso.so.1 => (0x00007fffca1b8000)
libc.so.6 => /lib/libc.so.6 (0x00007fc004649000)
/lib/ld-linux-x86-64.so.2 (0x00007fc004bf7000)
$ cat main.c
int main() { return ten(); }
$ gcc main.c -L. -ldyn
$ LD_LIBRARY_PATH=. ./a.out
$ echo $?
10
No es posible vincular bibliotecas compartidas a bibliotecas estáticas (a menos que realmente sepa muy bien lo que está haciendo). No lo hagas.
La primera advertencia es de libtool. Le dice que la operación que solicitó hará diferentes cosas en diferentes sistemas y algunas de esas cosas probablemente no sean lo que desea. A menudo, fallará de varias maneras espectaculares, porque el código que se encuentra en bibliotecas estáticas y compartidas debe compilarse con diferentes indicadores de compilación.
La segunda advertencia es de gcc. Te está diciendo que proporcionar una biblioteca estática al compilar no tiene sentido Eso es porque tienes $(PATH)/libmxml.a
en CFLAGS
, donde no tiene por qué ser. De hecho, la mayoría de las veces deberías no tener $(PATH)/libmxml.a
, pero -L$(PATH) -lmxml
en cambio. Eso aún debería ir en LDFLAGS
, pero gcc no se quejará si esto también llega a la línea de comandos del compilador.
Vincular la biblioteca compartida libgstmatroskademux.la con la biblioteca estática
Esto le advierte que si, p. intentó construir esto en Linux de 64 bits, probablemente fallaría. Eso es porque en x86_64, todo el código que se vincula a una biblioteca compartida debe ser compilado con -fPIC
bandera y código que vive en .a
las bibliotecas normalmente no lo son.
gcc:.../libmxml.a:el archivo de entrada del enlazador no se usó porque no se realizó el enlace
Esto le advierte que tiene una línea de comando falsa. Lo más probable es que esté compilando algo y tenga -c
en la línea de comando (que le dice a GCC que se detenga después de compilar el código fuente, y no realizar el enlace). Dado que también está proporcionando libmxml.a
en esa misma línea de comando, GCC se dio cuenta de que no sabes lo que estás haciendo y te advirtió que lo pensaras (más) al respecto.