2015-09-17 2 views
1

Сегодня я установил библиотеку программирования игр Allegro для C, и я попытался включить один из файлов заголовков, но когда я пытаюсь выполнить gcc -I./include example.c -o a.exe в терминале, я продолжаю получать эту ошибку:Неопределенные символы для архитектуры x86_64 в C

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
    implicit entry/start for main executable 
    (maybe you meant: __al_mangled_main) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Любые идеи? Я установил Allegro 5, используя инструкции здесь: https://wiki.allegro.cc/index.php?title=Install_Allegro5_From_GIT/OSX

код example.c:

#include <stdio.h> 
#include <allegro5/allegro.h> 

int main(int argc, const char *argv[]){ 
    puts(“Hello, world!”); 
    return 0; 
} 
+1

Почему '' argv' const? – Navin

+0

@Navin: Вы можете 'const', если хотите. Никто не может заставить вас изменить свой вектор аргументов. – EOF

+0

@EOF Мне было просто любопытно, потому что это не обычная подпись. – Navin

ответ

6

You need to link your executable to Allegro.

Согласно FAQ, вы должны добавить -lallegro к вашей команде компиляции или -lallegro -lallegro_main на OSX

Вам может понадобиться другие флаги, и Allegro 5 использует PKG-конфигурации вместо аллегро-конфигурации, так что pkg-config allegro-5.0 allegro_main-5.0 --cflags --libs найти вне.

Вы можете объединить это в команду компилятора, используя обратные выходы, например.

$CC -W -Wall `pkg-config allegro-5.0 allegro_main-5.0 --cflags --libs` foo.c -o foo.exe 
+0

Он работает, спасибо! Тем не менее, я заметил, что из команды 'pkg-config' файлы заголовков allegro находятся в'/usr/local/include'. Должен ли я включать это в качестве флага при компиляции или в эту папку, включенную в 'PATH', поскольку он содержит много других файлов заголовков для других библиотек? – Calculus5000

+2

@ Calculus5000 Это зависит от пути поиска вашего компилятора - например, GCC на нормальной платформе * nix по умолчанию будет выглядеть в '/ usr/local/include' (и в других местах), если вы не скажете, чтобы он смотрел в другом месте. Я считаю, что clang - то же самое. Поэтому, если вы используете GCC или clang, вам не нужно включать его в качестве флага. –

+0

Также можно получить краткое объяснение того, как эта команда 'pkg-config' работает? – Calculus5000

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