2012-03-06 6 views
2

나는 게임 엔진을 만들려고 노력하고 있으며 libconfig를 사용하여 모든 구성 요구를 처리했습니다. libconfig가 이미지, 사운드 등을로드하기 위해 구문 분석 한 설정 파일을 사용할 자산 관리자를 구축하는 중입니다.libconfig : libconfig :: Config :: Config()에 대한 정의되지 않은 참조

프로젝트를 컴파일하려고 할 때 문제가 발생합니다. 내가 처음 libconfig를 사용하려고

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' 

, 나는 내 시스템의 패키지 관리자를 사용하여 패키지를 다운로드 (:이 오류의 원인이되는 코드의 영역입니다 :

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; 
    } 
} 

이 오류입니다 apt-get, 우분투 11.10). 저것은 작동하지 않았다, 그래서 나는 프로젝트의 홈 페이지에서 도서관을 다운로드하고 설치하는 시도했다. 같은 오류.

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를/구성 설정에 문제가 있었다 밝혀졌습니다. 내 Makefile.am에는 LIBS= 대신 LDFLAGS+=이있었습니다. 명백하게 그것 (좋은 night 's 잠)은 거대한 효과를 낸다. 명령 행 위

* 마른 세수 *

+1

libconfig와 함께 제공되는 예제 프로그램을 컴파일하고 실행할 수 있습니까? http://www.hyperrealm.com/libconfig/libconfig_manual.html#Example-Programs –

+0

@DrTwox : 당신이 올바른 방향으로 나를 지적했습니다. 내 메이크 파일이 잘못되었다는 것을 알게된다 (물론, Makefile.am). 그것이 내가 automake를 배우고/toolchain을 구성 할 때마다 새로운 라이브러리를 시험해 보는 것입니다. –

답변

4

g++ -g ... -L/usr/lib -lSDL -lSDL_image -lconfig++ -o programm main.o ...

는 완전히 가짜입니다. 링크 행의 라이브러리 및 객체 순서는 matters이며 과 반대 순서로 사용해야합니다.

관련 문제