gpt4 book ai didi

c - gcc 4.7 中对 `main' 错误的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 19:44:33 25 4
gpt4 key购买 nike

我用 C 创建了一个程序并尝试编译它。当我在 Widows 中使用 gcc 4.8.1 编译器时,一切正常,我的程序也正常。

我使用以下参数进行编译:

gcc -std=c99 -O2 -DCONTEST -s -static -lm children.c

但在 Linux 中我收到以下错误:

/usr/lib/gcc/i486-linux-gnu/4.7/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status

这是为什么呢?我的程序正在运行,但我不明白为什么在 Linux 中出现编译错误。

我的代码是:

/*---------------------*/
/* included files */
/*---------------------*/
#include <stdio.h>
#include <stdlib.h>

/*---------------------*/
/* defined constants */
/* for restriction */
/*---------------------*/
#define MIN 1
#define MAX 1000000
#define IOERROR 5 // 'Input/Output Error'

/*---------------------*/
/* function prototypes */
/*---------------------*/
int main();
FILE *read_input(const char *filename_r);
int count_children(FILE *input);
int pass_heights(FILE *input, int *children, int size);
int check_tall(const int *children, int size);
void write_output(const int total,const char *filename_w);


/*---------------------*/
/* start of program */
/*---------------------*/
int main() {

const char *filename_r = "xxx.in";
const char *filename_w = "xxx.out";

FILE *input = read_input(filename_r);

int size = count_children(input);

int *children = malloc(size * sizeof *children);
if (children==NULL)
exit(1); //General application error

pass_heights(input, children, size);

fclose(input);

int total = check_tall(children, size);

free(children);

write_output(total,filename_w);

return 0;
}

FILE *read_input(const char *filename_r) {

FILE *input = fopen(filename_r, "r");

if(input == NULL)
exit(IOERROR);

return input;
}


int count_children(FILE *input) {

int count = 0;
fscanf(input, "%d",&count);

if(count > MAX || count < MIN)
exit(1); //General application error

return count;
}


int pass_heights(FILE *input, int *children, int size) {

for(int i = 0; i < size; i++)
fscanf(input, "%d",&children[i]);

return *children;
}


int check_tall(const int *children, int size) {

int total = 0;
int tmp_max = 0;
for(int i = size - 1; i >= 0; i--)
{
if(children[i] > tmp_max) {
tmp_max = children[i];
total++;
}
}
return total;
}


void write_output(const int total,const char *filename_w) {

FILE *output = fopen(filename_w, "w");

if(output == NULL)
exit(IOERROR);

fprintf(output, "%d\n", total);
fclose(output);
}

最佳答案

您使用了-static选项,该选项修改了可执行文件的链接方式。

我无法重现您的确切错误消息,但在我的 Linux 上它说它无法在静态模式下与 -lc 链接,而在我的 OSX 下它说它无法找到-lcrt0.o。对于我来说,这两种情况都意味着系统无法找到静态 stub 。

如果删除 -static 它应该可以工作。如果没有,你的问题就很奇怪了。

关于c - gcc 4.7 中对 `main' 错误的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27963150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com