Si ha vinculado con una biblioteca .a
, entonces ya se ha vinculado estáticamente. Nunca necesita enviar bibliotecas .a
. Son solo paquetes de objetos.
EDIT: Su error sugiere fuertemente que va a asociar la dylib en lugar de la .a. Si tiene libfoo.dylib
y libfoo.a
en la ruta de acceso de su biblioteca, incluso si dice "link libfoo.a
" en Xcode, e incluso si libfoo.a
está más arriba en la ruta de búsqueda, aún enlazará libfoo.dylib
. Esto se debe a que la vinculación de Xcode está totalmente rota y pasa -lfoo
al enlazador (nunca debe usar -l
para algo que haya creado y tenga la ruta exacta). Siempre recomiendo vincular las bibliotecas que construyó en LDFLAGS
en un archivo xcconfig en lugar de usar el panel de compilación. Pase la ruta exacta que desee en lugar de usar -l
. Consulte Abandoning the Build Panel para obtener más información acerca de xcconfig. Ahora está desactualizado, ya que fue escrito para Xcode3, pero los conceptos básicos aún se aplican.
Usando el panel de compilación, también puede pasar la ruta completa a la biblioteca en "Otros indicadores de enlazador". Pero esto todavía tiene todos los problemas del panel de compilación.
La solución más rápida (pero menos robusta) a veces es agregar -Wl,-search_paths_first
a los "Otros indicadores del enlazador". Esto cambia el comportamiento para que cada ruta de biblioteca se busque .dylib
y .a
antes de continuar (el comportamiento predeterminado es buscar en todas partes .dylib
y solo luego buscar .a
). Entonces, si su .a
está en un directorio diferente al .dylib
, y ese directorio está más temprano en la ruta de búsqueda, esto funcionará.
Esta pregunta finalmente me hizo abrir un radar en esto, lo que debería haber hecho hace años. Recomiendo que otros abran duplicates.
Eso es lo que pensé sin embargo cuando intenté ejecutar la aplicación en una computadora diferente, la aplicación no se ejecutará y aparece un error que dice que no puede encontrar el archivo .dylib relevante. ¿Los archivos .a deben estar vinculados al proyecto en otro lugar que no sea dentro de la sección "Enlace binario con bibliotecas"? –
"Al usar el panel de compilación, también puede pasar la ruta completa a la biblioteca en" Otras banderas de enlace ". Esto solucionó el problema. ¡Gracias! –