无法使用g ++链接sfml文件

时间:2015-08-10 19:06:33

标签: sfml linker-errors

我下载了sfml GCC - 适用于Linux的32位版本;虽然我的操作系统是ubuntu。我能够编译测试程序,但是当我尝试链接库时,我收到一个错误:

dylan@Aspire-one:~/Documents/SFML-2.3.1/projects$ g++ test.o -o sfml-app -L/home/dylan/Documents/SFML-2.3.1/lib -lsfml-graphics -lsfml-window -lsfml-system
/home/dylan/Documents/SFML-2.3.1/lib/libsfml-graphics.so: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'
collect2: error: ld returned 1 exit status

如果您有任何线索,请在下面发表评论,但我将非常感谢您的回答。

1 个答案:

答案 0 :(得分:0)

扩展我之前的评论:看起来你有SFML二进制文件链接到你系统上没有的glibc版本。您需要安装该版本的glibc(3.4.20,32位)或获取/构建链接到您拥有的glibc版本的SFML二进制文件。

Linux世界与Windows和Mac世界不同。多年来,正确的做事方式发生了变化。我个人的实验意愿也发生了变化。

您通常希望从您使用的发行版中获取二进制文件。在你的情况下Ubuntu,我的Fedora。这允许包管理器(例如,yum或apt-get)完成其工作:确定在安装新软件时是否具有所需的先决条件,根据需要卸载软件,以最小的麻烦安装更新等。如果您无法获得您想要的二进制文件,至少尝试找到一个可以告诉您的包管理器信任的存储库,以便您可以定期更新。

如果您无法以这种方式找到可接受的包裹,那么您唯一的选择就是从源头构建。从http://www.sfml-dev.org/download.php下载最新的源代码存档(获取版本号的版本,而不是“当前GitHub中的任何内容”)。看起来SFML目前使用CMake,因此您需要按照http://www.sfml-dev.org/tutorials/2.3/compile-with-cmake.php上的说明进行构建。

就个人而言,我不会执行最后的make install步骤。这会将二进制文件复制到/usr/local或类似的地方,但不会通知您的包管理器有关更改的信息。除了手动删除文件之外,没有办法卸载。相反,只需将您内置的文件夹添加到PATH(以及include文件夹中INCLUDE_PATH)即可。您将能够使用该设置开发您的应用程序,当有人最终为您的发行版创建它时,没有什么能阻止您安装该软件包。