Ho riscontrato alcuni problemi nella compilazione di un file name.c molto semplice su Mac OSX Lion.C - Simboli indefiniti per architettura x86_64 durante la compilazione su Mac OSX Lion
Ora, ho iniziato a seguire il corso Harvard CS50 su cs50.net. Non sono totalmente nuovo alla programmazione, ma ero curioso di sapere come questo corso è stato insegnato.
Questa è la fonte della name.c:
#include <stdio.h>
#include <cs50.h>
int
main(void)
{
printf("State your name:\n");
string name = GetString();
printf("O hai, %s!\n", name);
return 0;
}
Come si può vedere, si richiede questa libreria: https://manual.cs50.net/CS50_Library.
Ora, quando compilo esso, questo accade:
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
Se uso la stessa GetString() funzione cs50.c dentro il mio file sorgente, funziona perfettamente:
#include <stdio.h>
#include <string.h>
#include <float.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
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
}
Perché questo succede? Ho installato la libreria come si dice sul link sopra; Ho controllato e sia cs50.h che libcs50.a sono rispettivamente in/usr/local/include e/usr/local/lib.
Grazie in anticipo per il vostro aiuto.
Passate '-lcs50' al compilatore? – apmasell
E anche un appropriato '-L' per dire al compilatore dove cercare '-lcs50'? –
twalberg