libconfig неопределенная ссылка на libconfig :: Config :: Config () - PullRequest
2 голосов
/ 06 марта 2012

Я пытаюсь создать игровой движок, и я обратился к libconfig для удовлетворения всех моих потребностей в конфигурации.Я нахожусь в процессе создания менеджера ресурсов, который будет использовать файлы конфигурации, проанализированные libconfig, для загрузки изображений, звуков и т. Д.

У меня возникает проблема, когда я пытаюсь скомпилировать проект.Это область кода, которая вызывает ошибку:

AssetManager::AssetManager(GameEngine *engine){
  _engine = engine;
  _config = new Config(); // <-- ERROR ( this is line 5 )

  string path = string(ASSET_DIRECTORY);
  path += "assets.cfg";

  try {
    _config->readFile( path.c_str() ); //<-- ERROR ( this is line 11 )
  } catch ( const FileIOException &fioex ){
    cout << "File exception" << endl;
  } catch ( const ParseException &pex ){
    cout << "Parse exception" << endl;
  }
}

Это ошибка:

AssetManager.o: In function 'AssetManager':
/home/sean/Code/C++/Ridiculous/src/engine/AssetManager.cpp:5: undefined reference to 'libconfig::Config::Config()'
/home/sean/Code/C++/Ridiculous/src/engine/AssetManager.cpp:11: undefined reference to 'libconfig::Config::readFile(char const*)'
AssetManager.o:(.gcc_except_table+0x40): undefined reference to 'typeinfo for libconfig::ParseException'
AssetManager.o:(.gcc_except_table+0x44): undefined reference to 'typeinfo for libconfig::FileIOException'

Когда я впервые попытался использовать libconfig, я скачал пакет, используя мойменеджер пакетов системы (apt-get, я нахожусь на Ubuntu 11.10).Это не сработало, поэтому я попытался загрузить и установить библиотеку с домашней страницы проекта.Та же ошибка.

Для справки, вот строка, которую make пытается использовать для ее компиляции (это последний этап компиляции - связывание всего вместе, чтобы сделать основной исполняемый файл):

g++ -g -O2 -Wall -Isrc/engine/include -Isrc/engine/include/render -Isrc/engine/include/logic -I/usr/include -DVERSION=\"0.1\" -DPROG="\"Program Name\"" -I/usr/include/SDL -D_GNU_SORCE=1 -D_REENTRANT -L/usr/lib -lSDL -lSDL_image -lconfig++ -o programm main.o Engine.o AssetManager.o RenderEngine.o Log.o

Последние несколько часов я бился головой о стену, пытаясь понять это.Кажется, я ничего не могу найти, через Google, SO или случайно пытаясь отладить это самостоятельно.Не повезло.

У меня такое чувство, что мне не хватает чего-то сверхосновного, и, возможно, проблема заключается в моих ограниченных (но растущих!) Знаниях C ++.Или, может быть, я просто что-то потрепал.Я действительно не уверен.

Любая помощь очень ценится!(И если я это выясню, я опубликую ответ).

Примечание: я пытался пометить это с помощью 'libconfig', но, очевидно, этого тега не существует, и мне не хватаетрепутации для его создания.

РЕДАКТИРОВАТЬ

Оказывается, это была проблема с моей настройкой automake / configure.В моем Makefile.am у меня было LDFLAGS+= вместо LIBS=.Очевидно это (и хороший ночной сон) имеет огромное значение.

* facepalm *

1 Ответ

4 голосов
/ 07 марта 2012

g ++ -g ... -L / usr / lib -lSDL -lSDL_image -lconfig ++ -o программа main.o ...

Над командной строкой полностью фальшивая. Порядок библиотек и объектов в строке ссылки имеет значение , и вы использовали противоположный порядок того, каким он должен быть.

...