¿Cómo organizar el archivo fuente C previamente compilado por GCC Make y construirlos en un paquete Xcode? Tengo un símbolo duplicado _main Error

¿Cómo construir un .bundle a partir del código fuente?

Esto puede parecer un problema simple, pero me ha estado obstaculizando durante una semana ...

Aquí está mi problema:

Tengo un montón de archivos .c y .h que están organizados en una carpeta y sus subcarpetas. El código fuente fue escrito y compilado con gcc make y probado por muchas otras herramientas de make. El código fuente tiene algunas utilidades y herramientas de línea de comando y tiene más código que sirve como biblioteca para esas utilidades y herramientas. Son los archivos que sirven como bibliotecas los que quiero reutilizar. (Por biblioteca no me refiero a la biblioteca estática o algo así, solo quiero decir que algunos archivos .c y .h en ciertas subcarpetas proporcionan funciones que pueden ser llamadas por otros archivos .c. Quiero poder llamar a esas funciones, también

Sin embargo, mi problema es más complejo que eso: necesito construir esos .c y .h en un paquete para reutilizarlos. No estoy escribiendo mi solicitud en C; Estoy desarrollando en Unity y Unity solo puede admitir archivos .bundle en Mac OS.

Aquí está mi objetivo:

Organice la carpeta del código fuente de manera adecuada para que pueda compilarlos en un paquete en Xcode 4.

Aquí es donde me quedé atrapado:

Al construir el proyecto recibí el siguiente error:

Duplicate symbol _main in /Users/zeningqu/Library/Developer/Xcode/DerivedData/ccn-cfygrtkrshubpofnfxalwimtyniq/Build/Intermediates/ccn.build/Debug/ccn.build/Objects-normal/i386.ccnds / Normal / i386.ccnds /Library/Developer/Xcode/DerivedData/ccn-cfygrtkrshubpofnfxalwimtyniq/Build/Intermediates/ccn.build/Debug/ccn.build/Objects-normal/i386/ccnd_main.o para la arquitectura i386

Puedo relacionarme con este error porque puedo encontrar muchas entradas principales en el código fuente. La mayoría de ellos son utilidades de prueba.

Esto es lo que probé:

Intenté eliminar todos esos archivos .c de utilidad pero sin suerte. El error sigue ahí. Borro y borro hasta que algunos archivos no pueden encontrar la definición de la función que están llamando. Así que tuve que parar allí.

Aunque no pude construir un paquete pude construir una biblioteca estática C / C ++ (con una extensión .a). Después de obtener el archivo .a, intenté ponerlo en otro proyecto Xcode e intenté construirlo en un paquete. Podría construir un paquete de esa manera, pero luego tuve problemas para acceder al contenido del paquete. @ ¿Cómo llamo a las funciones definidas en una biblioteca estática .a si esa biblioteca está oculta en un paquete? Leí sobre la documentación de Apple que dice:

Nota: Algunos objetivos Xcod, e (como herramientas de shell y bibliotecas estáticas) no dan como resultado la creación de un paquete o paquete. Esto es normal y no es necesario crear paquetes específicamente para estos tipos de destino. Los binarios resultantes generados para esos objetivos están destinados a usarse tal cual.

(citado de:https: //developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html#//apple_ref/doc/uid/10000123i-CH100-SW)

quí está lo que pensé: Pensé en reemplazar todo main por algo como main_sth. Pero el código fuente no fue escrito por mí, así que no quería modificarlo. (Simplemente no parece una forma adecuada de hacerme cosas ...) Aprendí que Xcode tiene incorporado el compilador gcc. Así que supongo que si gcc puede hacerlo, ¿puede Xcode? Es una suposición descabellada: no estoy familiarizado con Xcode y gcc. Aquí hay un resumen de mis preguntas: ¿Hay alguna forma de organizar adecuadamente un montón de código previamente compilado y creado por gcc make para que puedan integrarse en un paquete Xcode? ¿Tiene sentido poner una biblioteca .a en un proyecto Xcode y construirla en un paquete? Si tiene sentido, ¿cómo llamo a las funciones definidas en .a después de que está integrado en un paquete?Es correcto reemplazar todas las entradas main () por otra cosa?

Respuestas a la pregunta(4)

Su respuesta a la pregunta