我正在尝试构建一个游戏引擎,并且我已经转向libconfig来处理我的所有配置需求。我正在构建 Assets 管理器,将使用由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还是我自己尝试对其进行调试。没有运气。

我感觉我缺少一些 super 基础的知识,这可能只是我对C++的有限(但正在增长!)知识所致。或者,也许我只是用手指操些东西。我真的不确定。

很感谢任何形式的帮助! (如果我知道了,我将发布答案)。

旁注:我尝试使用'libconfig'对其进行标记,但是显然该标记不存在,并且我还没有足够的声誉来创建它。

编辑

原来这是我的自动制作/配置设置的问题。在我的Makefile.am中,我使用LDFLAGS+=而不是LIBS=。显然,(和一夜安眠)有很大的不同。

*脸部*

最佳答案



上面的命令行完全是伪造的。链接行matters上库和对象的顺序,您使用了与之相反的顺序。

09-10 19:38