He creado una biblioteca estática, para vincularla en mis aplicaciones de iPhone. Esta biblioteca utiliza algunas variables y funciones globales, como en C. Mi problema es que cuando se utiliza por ejemplo:variables externas en la biblioteca estática, utilizando Objective-C
extern
void do_stuff (const int a)
{
return a*a;
}
extern const int a_variable;
extern const int an_array[DEFINED_VALUE];
Cuando utilizo esta función, o acceder a estas variables, en cualquier parte de mi código, el compilador me dice
"_do_stuff" hace referencia a partir de: - [Objeto testMethod] en tests.o
"_a_variable" hace referencia a partir de: - [Objeto testMethod] en tests.o
"_an_array" hace referencia a partir de: - [Objeto testMethod] en tests.o
Símbolo (s) que no se encuentra collect2: Id devolvió el código de salida 1
Alguien ha enfrentado a este problema antes? Sé que estoy haciendo algo estúpido, me falta algún concepto clave de Objective-C o C, pero realmente no puedo ver qué. Así que esperaba que alguien pudiera ayudarme. Gracias por adelantado.
Intenté con la biblioteca vinculada a la aplicación de destino, luego intenté con la aplicación de destino dependiendo del objetivo de la biblioteca. Ambos producen el mismo error. En cuanto al punto de declaración/definición, en realidad tengo los valores y los cuerpos de función definidos en un archivo .mm. Acabo de dar un ejemplo en aras de la simplicidad. Obviamente, las variables no se denominan a_variable, simplemente no puedo mostrar mi código debido a un contrato sigil. –
@Ricardo OK, eso es un poco extraño. Verifique que la biblioteca ('blah.a') aparezca realmente en la fase" Enlace binario con bibliotecas "del objetivo de su aplicación. También verifique que la biblioteca realmente exporte los símbolos requeridos. Si ambos son verdaderos, entonces estoy perplejo ... – walkytalky
Ahora que lo mencionas, tal vez no está exportando los símbolos que quiero a nivel mundial. Pero, ¿cómo puedo estar seguro de eso? –