这是我的第一个C代码。
我基本上有一个包含标题的主程序,在此标题中定义了一个函数,并在header.c文件中编写了该函数,并在我的主程序文件中使用了该函数。我还有一个Make文件
我希望我在保理方面做得对。
我得到了这个神秘的错误,我真的不明白,所以我希望你能帮忙。也许我在make文件中遇到链接错误了?
jakob@linux-hkem:~/Studium/Sem5/Betriebssysteme/Task1A> make all
cc header.c -o header
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../lib64/crt1.o: In function `_start':
/home/abuild/rpmbuild/BUILD/glibc-2.17/csu/../sysdeps/x86_64/start.S:119: undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [header] Fehler 1
这是我的代码:
制作文件:
all: ispalindrom
ispalindrom: ispalindrom.c header
gcc -std=c99 -pedantic -Wall -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -o ispalindrom ispalindrom.c header.c
clean: rm -f ispalindrom
主程序文件(ispalindrom.c)
#include <stdio.h>
#include "header.h"
int main(int argc, char **argv) {
if((checkPalin("Jakob")) == 0){
printf("%s ist ein Palindrom\n", "Jakob");
}
else {
printf("%s ist kein Palindrom\n", "Jakob");
}
if((checkPalin("abcba")) == 0){
printf("%s ist ein Palindrom\n", "abcba");
}
else {
printf("%s ist kein Palindrom\n", "abcba");
}
if(checkPalin("abccba") == 0){
printf("%s ist ein Palindrom\n", "abccba");
}
else {
printf("%s ist kein Palindrom\n", "abccba");
}
return 0;
}
header.h
/* header.h */
#ifndef HEADER_H
#define HEADER_H
int checkPalin(char *);
#endif /* HEADER_H */
header.c
#include "header.h"
#include <string.h>
/**
* return 0 when String is an palindrom.
*/
int checkPalin(char string[]) {
int start = 0;
int end = strlen(string);
while(start < end) {
if(string[start] != string[end]) {
return -1;
}
else {
start++;
end--;
}
}
return 0;
}
答案 0 :(得分:2)
您需要运行:
cc -c header.c
cc -c ispalindrom.c
cc -o ispalindrom ispalindrom.o header.o
或者:
cc -o ispalindrom ispalindrom.c header.c
如有必要,您可以添加其他编译器选项(优化程序标志等)。实际上,使用-Wall
(或更严格地,-Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes
或类似的)进行编译会很好。
实际上,makefile
中有一个小错误;你说ispalindrom
取决于header
。
你需要:
all: ispalindrom
ispalindrom: ispalindrom.c header.c
gcc -std=c99 -pedantic -Wall -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -o ispalindrom ispalindrom.c header.c
clean:
rm -f ispalindrom
或者:
CFLAGS = -std=c99 -pedantic -Wall -D_XOPEN_SOURCE=500 -D_BSD_SOURCE
all: ispalindrom
ispalindrom: ispalindrom.o header.o
clean:
rm -f ispalindrom header.o ispalindrom.o core a.out
答案 1 :(得分:1)
gcc尝试将header.c编译为主应用程序而不是目标文件,搜索函数main。 您应该为header.c添加-c编译器开关