gpt4 book ai didi

c - 在函数 `_start' : (. text+0x20) 中:对 `main' 的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 18:11:06 26 4
gpt4 key购买 nike

我知道以前曾有人问过这个问题,但我似乎找不到我需要的答案。编译器似乎与其他代码一起工作得很好,所以我相信问题出在代码中。我正在使用 eclipse,首先我认为这可能是一个配置错误,但是当我在命令行中尝试时,它是相同的错误。

如果您看一下,我将非常感激。谢谢!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


#ifndef min
#define min(x,y) (((x) < (y)) ? (x) : (y))
#endif

#define MAX_PROG_STEP_SIZE 10
#define MAX_COLS 80

static int init = 0;

#ifdef _WIN32

#include <windows.h>

void init_io(void) {
system("cls");
srand(time(NULL));
init = 1;
}

CHAR GetCh(VOID) {
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
INPUT_RECORD irInputRecord;
DWORD dwEventsRead;
CHAR cChar;

while(ReadConsoleInputA(hStdin, &irInputRecord, 1, &dwEventsRead)) /* Read key press */
if (irInputRecord.EventType == KEY_EVENT) {
cChar = irInputRecord.Event.KeyEvent.uChar.AsciiChar;
ReadConsoleInputA(hStdin, &irInputRecord , 1, &dwEventsRead); /* Read key release */
return cChar;
}
return EOF;
}

void shutdown_io(void) {
// NOP
}

#else

#include <unistd.h>
#include <termios.h>
#define GetCh getchar

static struct termios old_termios_settings;

void init_io(void) {
struct termios new_termios_settings;

tcgetattr(0, &old_termios_settings);
new_termios_settings = old_termios_settings;

/* Disable canonical mode and echoing, and set buffer size to 1 byte */
new_termios_settings.c_lflag &= (~ICANON & ~ECHO);
new_termios_settings.c_cc[VTIME] = 0;
new_termios_settings.c_cc[VMIN] = 1;

tcsetattr(0, TCSANOW, &new_termios_settings);

setvbuf(stdin, NULL, _IONBF, 0);
system("clear");
srand(time(NULL));
init = 1;
}

void shutdown_io(void) {
tcsetattr(0, TCSANOW, &old_termios_settings);
}

#endif

unsigned int get_progress(void) {
static unsigned int progs = 0;
unsigned int rand_val;
unsigned int i;
if (progs == 0xFFFFFFFF)
return progs;

rand_val = rand() % MAX_PROG_STEP_SIZE;
i = rand() % 4;
while (((progs >> (i * 8)) & 0xFF) == 0xFF) {
i = (i + 1) % 4;
}
if (((progs >> (i * 8)) & 0xFF) + rand_val < 0xFF)
progs += rand_val << (i * 8);
else
progs |= 0xFF << (i * 8);
return progs;
}

void progressbar(char done_symbol, char active_symbol, char todo_symbol, unsigned int percent) {
unsigned int w = MAX_COLS - 2;
unsigned int limit = percent*w/100;
unsigned int i;

if (init == 0)
exit(42);

printf("\r[");
for (i = 0; i < w; i++) {
putchar(i < limit ? done_symbol : (i == limit ? active_symbol : todo_symbol));
}
printf("]\r");
fflush(stdout);
}

void wait_key(void) {
if (init == 0)
exit(42);
(void)GetCh();
}

控制台输出是这样的:

make all 
Building target: progressWarmUp
Invoking: Cross GCC Linker
gcc -o "progressWarmUp" ./main.o
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
makefile:29: recipe for target 'progressWarmUp' failed
collect2: error: ld returned 1 exit status
make: *** [progressWarmUp] Error

1

最佳答案

我相信您正在尝试构建一个目标文件。

gcc 默认情况下调用时,将尝试构建可执行文件。如果在您指定要编译和链接的文件之一中找不到 main 函数,它就无法执行此操作。

要仅构建目标文件,请在编译代码时将 -c 标志传递给 gcc

gcc -o "progressWarmUp"-c ./main.o

这将告诉 gcc 在编译过程之后和链接过程之前停止。请注意,如果您确实想自己执行此代码,则必须通过将其与具有定义的 main 函数的目标文件链接来将其链接到可执行文件。

关于c - 在函数 `_start' : (. text+0x20) 中:对 `main' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219357/

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