Linuxプログラミングの教科書で日記帳を作成するプログラムでうまく行かないところがあります。
Macbookのターミナルで入力すると、以下のようなエラーが出ました。
gcc diary1.c Undefined symbols for architecture x86_64: "_getint", referenced from: _main in diary1-1e3b4d.o "_getstr", referenced from: _writediary in diary1-1e3b4d.o _readdiary in diary1-1e3b4d.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
教科書通り試しているのですが、どこが間違えているのかわかりませんでした。
プロトタイプ宣言は別ファイルで書いていて、関数名も違っていないと見えます。
以下が対象のプログラムなので、何か間違えていたらどなたかご教授お願いします。
/* mysub.h */ int getint(char *); double getdouble(char *); void getstr(char *, char *, int); /* diary1.c */ #include <stdio.h> /* clearerr, fclose, feof, ferror, fgets, fopen, fputs, perror */ #include <stdlib.h> /* exit */ #include "mysub.h" enum { MAXLINE = 1024, }; void writediary(void); void readdiary(void); int main(void) { int cmd; for (;;) { cmd = getint("1=write, 2=read, 3=end: "); switch (cmd) { case 1: writediary(); break; case 2: readdiary(); break; case 3: return 0; default: fputs("unknown command\n", stderr); break; } } } void writediary(void) { FILE *fp; char date[MAXLINE], s[MAXLINE]; getstr("date (MMDD): ", date, sizeof(date)); fp = fopen(date, "w"); while (fgets(s, sizeof(s), stdin) != NULL) { fputs(s, fp); } if (feof(stdin)) { /* EOFか? */ clearerr(stdin); } else { /* エラー */ perror("fgets"); exit(1); } fclose(fp); } void readdiary(void) { FILE *fp; char date[MAXLINE], s[MAXLINE]; getstr("date (MMDD): ", date, sizeof(date)); fp = fopen(date, "r"); while (fgets(s, sizeof(s), fp) != NULL) { fputs(s, stdout); } if (ferror(fp)) { /* エラー? */ perror("fgets"); exit(1); } fclose(fp); }

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。