2012-03-06 68 views
2

我试图建立一个游戏引擎,我已经转向libconfig处理我所有的配置需求。我在构建将使用libconfig解析加载图像的配置文件,声音的资产管理公司的过程中,等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上)。这没有奏效,所以我尝试从项目主页下载并安装库。同样的错误。

仅供参考,这里是使正在试图使用编译它(这是最后的编译阶段 - 连接一切融合在一起,使主可执行文件)行:

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

我一直在过去的几个小时里,我的头撞在墙上试图弄清楚这一点。似乎找不到任何东西,通过谷歌,SO,或随机试图自己调试。没有运气。

我有我失去了一些东西超级基本的感觉,并有可能这只是我的限制(但成长!)的C++知识,可能是这个问题。或者,也许我只是发指手画脚的东西。我真的不确定。

任何帮助非常感谢! (如果我知道了,我会发布答案)。

附注:我试图与“libconfig”标记这一点,但显然该标签不存在,我没有足够的声誉还没有创建它。

编辑

原来这是我的automake /配置安装程序的问题。在我的Makefile.am中,我有LDFLAGS+=而不是LIBS=。显然,(和一个良好的睡眠)会产生巨大的差异。

*捂脸*

+1

您是否能够编译和运行附带libconfig范例程序? http://www.hyperrealm.com/libconfig/libconfig_manual.html#Example-程序 – 2012-03-06 03:30:55

+0

@DTTwox:您指出我的方向正确。原来我的makefile不正确(好吧,Makefile.am)。这就是我想要全力以赴,在尝试新库的同时学习automake/configure工具链。 – 2012-03-07 00:04:26

回答

4

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

上面的命令行完全是伪造的。链接线matters库和对象的顺序,和你用的应该是什么相反秩序。