Компиляция программы Allegro 5 через командную строку на Mac

Я выполнил шаги по сборке и установке Allegro 5 из их вики (здесь: https://wiki.allegro.cc/index.php?title=Main_Page) и, похоже, удалось без проблем.

allegro был установлен в следующие (как предполагает вики) /usr/local/include и usr/local/lib, и я подтвердил, что allegro там.

Затем я написал следующий код в vim:

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

int main(int argc, char **argv)
{
   ALLEGRO_DISPLAY *display = NULL;

   if(!al_init())
   {
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   }

   display = al_create_display(640, 480);

   if(!display)
   {
      fprintf(stderr, "failed to create display!\n");
      return -1;
   }

   al_clear_to_color(al_map_rgb(0,0,0));
   al_flip_display();
   al_rest(10.0);
   al_destroy_display(display);

   return 0;
}

Я новичок в использовании Unix и только когда-либо компилировал программы C++ с g++, которые были простыми файлами hello world без каких-либо библиотек.

Поэтому после поиска в Интернете я попробовал следующие команды:

g++ hello.cpp -o hello `pkg-config --libs allegro-5`

в результате получилось следующее:

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

Кстати, я использовал доморощенный для установки зависимостей вместо macports

brew install pkg-config brew install zlib и т.д...

Похоже проблема со связью.

Что я делаю неправильно?


person Smartypants    schedule 04.03.2015    source источник
comment
Попробуйте использовать $(pkg-config --libs allegro-5) вместо `pkg-config --libs allegro-5`   -  person l'L'l    schedule 04.03.2015
comment
Я только что попробовал это, и это приводит к той же ошибке. Я думаю, что это как-то связано с тем, что вещи не связаны должным образом, но я не знаю, как это исправить.   -  person Smartypants    schedule 04.03.2015
comment
Вы пытаетесь скомпилировать статические библиотеки или динамические? и что выводит команда: pkg-config --libs allegro-5   -  person l'L'l    schedule 04.03.2015
comment
Я использую статические библиотеки (по крайней мере, я так думаю. См. здесь: wiki.allegro.cc/index.php?title=Install_Allegro5_From_GIT/) сборка статического allegro с выводом make: -L/usr/local/lib -llallegro   -  person Smartypants    schedule 04.03.2015
comment
g++ hello.cpp -o привет pkg-config --cflags --libs allegro-5 allegro_main-5 - ЭТО РАБОТАЛО. понятия не имею, почему.   -  person Smartypants    schedule 04.03.2015
comment
Хорошо, поставь это как ответ и прими это. :) (должно быть ключевой была часть allegro_main-5)?.   -  person l'L'l    schedule 04.03.2015


Ответы (1)


попробуйте установить allegro с помощью homebrew и используйте gcc -o main main.c -lallegro -lallegro_main

потому что allegro_main — это библиотека совместимости, которая позволяет функции main работать со всеми компиляторами. Требуется только от OS X.

person Cletrix    schedule 24.09.2017