C – Símbolos no definidos para la architecture x86_64 al comstackr en Mac OSX Lion

Tengo algunos problemas al comstackr un archivo name.c muy simple en Mac OSX Lion.

Ahora, comencé a seguir el curso Harvard CS50 en cs50.net. No soy totalmente nuevo en progtwigción, pero tenía curiosidad por saber cómo se impartió este curso.

Esta es la fuente de name.c:

#include  #include  int main(void) { printf("State your name:\n"); string name = GetString(); printf("O hai, %s!\n", name); return 0; } 

Como puede ver, requiere esta biblioteca: https://manual.cs50.net/CS50_Library .

Ahora, cuando lo compilo, esto sucede:

 Undefined symbols for architecture x86_64: "_GetString", referenced from: _main in name-vAxcar.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [name] Error 1 

Si uso la misma función GetString () cs50.c dentro de mi archivo fuente, funciona perfectamente:

 #include  #include  #include  #include  #include  #include  typedef char *string; string GetString(void); int main(void) { printf("State your name:\n"); string name = GetString(); printf("O hai, %s!\n", name); } string GetString(void) { // CODE } 

¿Por qué pasó esto? Instalé la biblioteca como dice en el enlace de arriba; Lo comprobé y tanto cs50.h como libcs50.a están respectivamente en / usr / local / include y / usr / local / lib.

Gracias de antemano por su ayuda.

El problema que encuentras está en la etapa de vinculación, no en la comstackción. No proporcionó la implementación de GetString , solo su statement (a través del archivo .h #include ).

Para proporcionar la implementación en sí, por lo general es necesario vincular la biblioteca que la incluye; Esto generalmente se hace mediante el indicador -l a g++ . Por ejemplo,

 g++ file.cpp -lcs50 

Su segundo código de muestra se vincula, ya que manualmente (y explícitamente) proporciona una implementación para GetString , aunque está vacía.