我在C中使用makefile存在輕微問題。我一直在教科書中遵循教程,但它似乎並不想工作。我有三個文件,message_hider.c,encrypt.h和encrypt.c。當我爲這些文件創建一個makefile時,它會返回一個錯誤,但是當我單獨運行每個命令時,它工作得很好。這是我的文件。C makefile undefined - 引用錯誤
encrypt.c
#include "encrypt.h"
void encrypt(char *message) {
char c;
while (*message) {
*message = *message^31;
message++;
}
}
message_hider.c
#include <stdio.h>
#include "encrypt.h"
int main() {
char msg[80];
while (fgets(msg, 80, stdin)) {
encrypt(msg);
printf("%s", msg);
}
}
encrypt.h
void encrypt(char *message);
生成文件
message_hider: message_hider.o encrypt.o
gcc message_hider.o encrypt.o -o message_hider
message_hider.o: message_hider.c encrypt.h
gcc -c message_hider.c
encrypt.o: encrypt.c encrypt.h
gcc -c encrypt.c
錯誤消息
$ make message_hider
cc message_hider.o -o message_hider
message_hider.o:message_hider.c:(.text+0x17): undefined reference to `encrypt'
message_hider.o:message_hider.c:(.text+0x17): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `encrypt'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: message_hider.o: bad reloc address 0x0 in section `.pdata'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: final link failed: Invalid operation
collect2: error: ld returned 1 exit status
<builtin>: recipe for target 'message_hider' failed
make: *** [message_hider] Error 1
它似乎沒有使用你的makefile。嘗試用'echo building $ @'替換'message_hider'規則中的命令('gcc message_hider.o ...'),並告訴我們會發生什麼。 – Beta
我替換它,它出現了完全相同的錯誤 – jeebz88
'make --version'的輸出是什麼,你確定你在製作文件中使用製表符而不是四個空格嗎? – merlin2011