2015-09-02 5 views
-1

У меня есть следующий файл C, и я использую компилятор Mac OS X GCC. Вы найдете ошибку ниже.Ошибка компилятора компилятора команды GCC

#include "support.h" 

#ifdef _WIN32 

#include <conio.h> 

void support_init() { 
    // not needed 
} 

void support_clear() { 
    system("CLS"); 
} 

int support_readkey(int timeout_ms) { 
    Sleep(timeout_ms); 
    if (!kbhit()) return 0; 
    return getch(); 
} 

#else 

#include <stdio.h> 
#include <unistd.h> 
#include <termios.h> 
#include <sys/select.h> 

void support_init() { 
    struct termios tio; 
    tcgetattr(STDIN_FILENO, &tio); 
    tio.c_lflag &= (~ICANON & ~ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &tio); 
} 

void support_clear() { 
    printf("\x1B[2J\x1B[0;0f"); 
} 

int support_readkey(int timeout_ms) { 
    struct timeval tv = { 0L, timeout_ms * 1000L }; 
    fd_set fds; 
    FD_ZERO(&fds); 
    FD_SET(0, &fds); 
    int r = select(1, &fds, NULL, NULL, &tv); 
    if (!r) return 0; 

    return getchar(); 
} 

#endif 

И это мой Makefile:

CFLAGS=-std=c11 -Wall -g 
CC=clang 

all: snake 

.PHONY: all clean 

snake: snake.o support.o 

snake.o: snake.c support.h 

clean: 
    rm -f snake 
    rm -f snake.o support.o 

Когда я пытаюсь скомпилировать с помощью команды "сделать все" я получаю следующее сообщение об ошибке:

ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see   
invocation) 

Пожалуйста, помогите. Я новичок в C :-)

+0

Вы используете 'clang', а не' gcc'. Makefile явно указывает это, и сообщение об ошибке четко указывает на это. Если вам нужна хорошая помощь, то получите свою историю (и теги) прямо. –

+0

Хотя сообщение об ошибке несколько нечеткое, это вполне может быть вызвано отсутствием функции 'main()' в 'snake.c'. Функция main() 'является точкой входа вашей программы; каждая программа должна иметь ровно одну, определенную где-то среди своих исходных файлов. –

+0

Привет, Джон, спасибо за помощь – Philip94

ответ

0

проверить архитектуру на основе того, что cflags shoule обновляется до -m32 или -m64, для успешной компиляции на 64-битной машине, это должно быть установлено на -m64.

CFLAGS + = -m64

Смежные вопросы