0

これは私の最初の C コードのようなものです。

基本的に、ヘッダーを含むメイン プログラムがあり、このヘッダーで関数が定義され、header.c ファイルでこの関数が記述され、メイン プログラム ファイルで関数が使用されます。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;
}
4

2 に答える 2

3

次を実行する必要があります。

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
于 2013-10-26T14:45:18.223 に答える