2011-07-30 12 views
10

I encontró ejemplos y puestos aestáticos del edificio C lib ++ para su uso con aplicación Objetivo-c en Xcode 4

  • Crear un C lib estática ++ para su uso en una aplicación de
  • C++ Crear un lib C Objetivo estática para usar en una aplicación Objective C.

Lo que no podía encontrar y he molestado un poco con Desde hace días, es la forma correcta de crear un C++ lib estática para su uso en una aplicación de Objective-C en XCode 4.

sólo quiero para utilizar el código muy simple para propósitos de prueba:

#include <iostream> 
#include "myCppLib.h" 

using namespace std; 

extern "C" void show_the_world() { 
    cout << "Hello, world!\n"; 
} 

compilo esto con ARMv6/ARMv7 objetivo, GCC 4.2 compilador, Vinculación 'C++ estándar biblioteca de tipos' como 'estática' y tienen "Símbolos ocultos por defecto" a SÍ, como se describe en la ayuda de Xcode para bibliotecas estáticas de C++.

Mi aplicación de Objective-C, que llama a los 'show_the_world' errores de función sobre el std ++ lib, que parece no estar incluido o no se hace referencia correctamente:

Undefined symbols for architecture armv6: 
"std::ios_base::Init::~Init()", referenced from: 
    ___tcf_0 in libmyCppLib_dev.a(myCppLib.o) 
    "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from: 
     _show_the_world in libmyCppLib_dev.a(myCppLib.o) 
    "std::ios_base::Init::Init()", referenced from: 
    __static_initialization_and_destruction_0(int, int)in libmyCppLib_dev.a(myCppLib.o) 
    "std::cout", referenced from: 
    _show_the_world in libmyCppLib_dev.a(myCppLib.o) 
ld: symbol(s) not found for architecture armv6 
collect2: ld returned 1 exit status 

Estoy seguro de que he compilado la biblioteca para la arquitectura correcta, por lo que debe haber algo mal en otro entorno o con mi código.

¡Cualquier ayuda es bienvenida!

Saludos, barreta

+0

Este tema puede ayudar - http://stackoverflow.com/questions/376966/using-c-c-static-libraries-from-iphone-objectivec-apps. – Perception

+5

Ya encontré esta publicación, pero debido a mi inglés "no tan bueno", no encontré la respuesta en esta publicación. Después de que me redireccionaras a esto, me tomé un poco más de tiempo, y ahora funciona :) El punto era incluir la biblioteca de std ++ en la compilación del proyecto objetivo-c resultante, también. Entonces, ¡muchas gracias! –

+0

¡Felicitaciones por hacerlo! – Perception

Respuesta

2

con respuesta en mi propio comentario.);

El objetivo era incluir la biblioteca de std ++ en la compilación del proyecto objetivo-c resultante, también.

10

La respuesta correcta fue proporcionado por Jimmy Koerting en los comentarios: la aplicación debe estar vinculada contra libstdC++ dylib para resolver los símbolos de la biblioteca estándar.. Gracias a Jimmy Koerting, pero una cosa más que quiero agregar aquí es, si está usando Xcode última versión con IOS 6.1 por favor agregue este libstdC++ 6.dylib

+0

Sí, en mi Xcode 5.0.2 tuve que usar libstdC++. 6.dylib para resolver los errores del enlazador. El uso de libstdC++. Dylib o libC++. Dylib no ayudó. –

Cuestiones relacionadas