Creación de comstackción estática de Mac OS XC

¿Cómo puedo crear una comstackción estática de un archivo .c en Mac OS X? Cuando bash:

gcc -o test Main.c -static 

Yo obtengo:

 ld: library not found for -lcrt0.o collect2: ld returned 1 exit status 

No es compatible con gcc de Mac OS X:

http://discussions.apple.com/message.jspa?messageID=11053384

Quizás esa bandera “estática” no funcionará en MacOS X. No todas las características de gcc están implementadas en MacOS X. Apple ni siquiera va a usar gcc en futuras versiones del sistema operativo.

No sé cómo vincular usando “-estático”. No puedo pensar en ninguna razón para hacerlo en MacOSX. Si supiera por qué quería usar “-estático”, podría estar más interesado en el problema. En este momento, simplemente no lo entiendo. Al pedir ayuda, esencialmente está pidiendo colaboradores en el proyecto, incluso si solo es por 10 minutos. Necesitas que me interese

Y http://developer.apple.com/library/mac/#qa/qa2001/qa1118.html

La conexión estática de binarios de usuario no es compatible con Mac OS X. La vinculación de binarios de usuarios a la implementación interna de bibliotecas e interfaces de Mac OS X limitaría nuestra capacidad de actualizar y mejorar Mac OS X. En cambio, se admite vinculación dinámica (vinculación con crt1. o automáticamente en lugar de buscar crt0.o, por ejemplo).

Recomendamos encarecidamente que considere las limitaciones de la vinculación estática con mucho cuidado y considere a su cliente y sus necesidades, además del soporte a largo plazo que deberá brindar.

Actualización: lo prohibido es un binario estático. Pero aún puede comstackr una biblioteca estática y usarla con otro progtwig. El progtwig se vinculará estáticamente con su biblioteca, pero otras bibliotecas como libc serán dinámicas, por lo que el progtwig será un ejecutable dynamic.

Un archivo binario que no tenga bibliotecas cargadas dinámicamente no se puede comstackr en OSX. Probé tanto con Apple llvm-gcc como con macports gcc. Sin embargo, lo que ninguna respuesta mencionada hasta ahora es que esto no es necesario. Puede vincular la biblioteca c / c ++ estáticamente (y vivir con alguna parte dinámica).

Archivo hello.cpp:

 #include  using namespace std; int main() { cout << "Hello World!"; } 

Comstackr como de costumbre:

 g++ hello.cpp -o hello 

Compruebe el enlace:

 otool -L hello hello: /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

No podemos deshacernos de la dependencia libSystem.B.dylib pero con macports gcc podemos hacer esto:

 g++-mp-4.6 -static-libgcc -static-libstdc++ hello.cpp -o hello otool -L hello hello: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

Aparentemente solo Apple no admite enlaces estáticos:

 llvm-g++ -static-libgcc -static-libstdc++ hello.cpp -o hello otool -L hello hello: /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 

Imagine que desea convertir algunas funciones en una biblioteca.

Archivo: example.c

 #include  void aFunction( int a ) { printf( "%d\n", a ); } 

Archivo: example.h

 void aFunction( int a ); 

Archivo: main.c

 #include "example.h" int main( ) { aFunction( 3 ); return 0; } 

Para crear la biblioteca:

 gcc -c example.c ar -r libmylibrary.a example.o 

Para vincular la biblioteca:

 gcc main.c -lmylibrary -L. -I. 

Y luego el archivo example.c es una comstackción estática de todo el progtwig.