在真正开始讨论这个问题之前,我认为值得一提的是,我对链接库和诸如此类的东西非常陌生。我从开源项目/游戏/等等和谷歌(以及与Thenewboston的Bucky的C ++有关的任何事情)中学到了我所知道的一切。在问之前我也做了相当多的研究,但无论如何:< / p>
问题本身就从这里开始
我正在使用CodeBlocks(最新版本,我不确定目前是什么)
我正在尝试使用fallahn的SFML Tiled地图加载器,到目前为止我已成功静态链接SFML并在我的源代码中包含了地图加载器文件,并将其添加到我的搜索目录中,但是,我有链接zlib(地图加载器使用)
的问题我会继续介绍我如何链接zlib,因为我甚至不确定我搞砸了哪一步:
我进入了项目的构建选项,最初我想“我将像以前一样全局设置我的搜索目录”(对于SFML和地图加载器,有一个'include'和'lib'文件夹,我将'include'放在编译器搜索目录中,并在链接器搜索目录中放置'lib',除了在解压缩后的文件夹中没有名为'include'或'lib'的文件夹。这是我简单地包含我解压缩的整个文件夹的地方(我很确定这是一种可怕的做法,但我不确定还能做什么)
我从Map loader的源文件中编译了一个例子,并在4个不同的场合得到了'undefined reference to inflate'的错误。我已经想到了这一点,我在链接时犯了一个错误,所以当我拿到谷歌时。大多数答案只是“添加-lz”或“链接libz”
无论如何,这里有一些我根本不懂的东西,如果你无法解释它们是什么,请至少解释一下如何盲目地做到: 1.编译库 2.与make文件有关,我不知道它们是什么或它们做什么 3.将命令添加到项目命令行。
对不起,如果这是相当冗长的,但我觉得这个介绍是必要的,因为也许有人可以将我与我可能需要的任何补充知识联系起来,这将有所帮助,但提前感谢阅读。
编辑:
构建消息:
C:/ Documents and Settings / Brenda / Desktop / sfml-tmxloader-master / src / MapLoaderPrivate.cpp:834:未定义引用inflateInit2_'
C:/Documents and Settings/Brenda/Desktop/sfml-tmxloader-master/src/MapLoaderPrivate.cpp:843: undefined reference to
inflate'
C:/ Documents and Settings / Brenda / Desktop / sfml-tmxloader-master / src / MapLoaderPrivate.cpp:852:未定义引用inflateEnd'
C:/Documents and Settings/Brenda/Desktop/sfml-tmxloader-master/src/MapLoaderPrivate.cpp:881: undefined reference to
inflateEnd'
collect2.exe:错误:ld返回1退出状态
进程终止,状态为1(0分10秒)
4个错误,0个警告(0分钟,10秒)
答案 0 :(得分:0)
问题是,zlib不直接为MinGW提供二进制文件,它们只提供* .lib,* .def和* .dll文件,但是为了与MinGW / GCC链接,你需要一个* 。一份文件。 由于zlib是一个C库,因此ABI将是相同的,因此您可以“简单地”转换它,例如在lib2a的帮助下。虽然这应该可行,但是下载源代码并自己构建zlib可能更好,因为它附带了一个CMake文件,它很容易构建。