SFML 2.1 x86_64 架构未定义符号错误

5

我最近安装了SFML 2.1,正在尝试从终端(而非Xcode)编译和运行它们网站上的示例程序。该程序的网址是http://www.sfml-dev.org/tutorials/2.0/start-linux.php

   Path to where I installed SFML:
   /Users/.../Desktop/C++_Code/SMFL/SFML-2.1-osx-gcc-universal

然而,我一直遇到以下错误:
   Undefined symbols for architecture x86_64:
   "sf::String::String(char const*, std::__1::locale const&)", referenced from:
  _main in window-48cb4a.o

在谷歌搜索后,我发现了这个问题:SFML 2.1 RenderWindow链接错误 在被采纳的答案中,该人说如果我想使用g++,我必须下载“GCC”版本。所以,我继续下载了GCC - universal 32+64位(OS X 10.5+)版本,并按照Linux上安装和编译SFML的说明进行操作,因为没有适用于Mac的说明(http://www.sfml-dev.org/tutorials/2.0/start-linux.php),具体步骤如下:
由于我将SFML安装在非标准位置,所以我告诉编译器在哪里找到头文件,方法如下:
   -I /Users/.../Desktop/C++_Code/SMFL/SFML-2.1-osx-gcc-universal/Frameworks/SFML.framework/Headers

我还需要告诉编译器在哪里找到SMFL库:

  -L /Users/.../Desktop/C++_Code/SMFL/SFML-2.1-osx-gcc-universal/lib

我需要告诉库加载器从哪里找到SFML库:
  export LD_LIBRARY_PATH=/Users/.../Desktop/C++_Code/SMFL/SFML-2.1-osx-gcc-universal/lib

然后,我将sfml-audio.framework、sfml-window.framework、sfml-graphics.framework、sfml-network.framework和sfml-system.framework放在我的Frameworks目录(/Library/Frameworks)中。
最后,我尝试以下两种方式编译我的程序:
  1. g++ window.cpp -I /Users/.../Desktop/C++_Code/SMFL/SFML-2.1-osx-gcc-universal/Frameworks/SFML.framework/Headers/SFML -L /users/.../Desktop/C++_Code/SMFL/SFML-2.1-osx-gcc-universal/lib -framework sfml-graphics -framework sfml-window -framework sfml-system

  2. g++ window.cpp -framework sfml-graphics -framework sfml-window -framework sfml-system

但是,我一直得到相同的错误。我继续谷歌这个错误,但所有我找到的问题都是关于使用Xcode而不是终端的。任何帮助将不胜感激!

非常感谢Joachim Pileborg编辑我的问题! - busebd12
似乎您的预构建SFML库是使用GCC(及其libstdc ++)构建的,而您正在使用Clang(它使用libc ++)。要么尝试找到使用Clang和libc ++构建的预构建版本的SFML,要么下载源代码并自行构建。不要被您使用命令g ++来构建所迷惑,实际上使用的是clang ++ - Some programmer dude
我不知道Darwin框架如何影响这个问题,但通常使用gcc/g++库需要一个“-l”选项来指定库(“-L”选项只是指定要搜索的目录 - 编译器/链接器不会在其中搜索所有库,只搜索特定的库)。 - Michael Burr
啊,有趣,我不知道关于g++的那些。是否有类似于g ++的东西,我可以使用它来正确编译我已经拥有的内容,而无需重新下载SFML? - busebd12
1个回答

4
我终于想通了!首先,正如Joachim Pileborg所指出的那样,我需要安装适用于Mac的SFML的clang版本,因为我使用的是g++编译器,实际上是伪装成clang++的。接下来,我必须再次查看有关在Linux上设置SFML的说明(http://www.sfml-dev.org/tutorials/2.0/start-linux.php)。
然而,最后的关键是当我阅读了这个问题时:

OSX GCC how to specify sfml library source?

和这个问题:

FreeType error when building in XCode

这让我想到:也许我应该尝试将我的freetype.framework文件夹(可以在extlibs目录中找到)移动到/Library/Frameworks目录中。一旦我这样做并使用编译器进行编译,结果就成功了。
g++ window.cpp -framework sfml-graphics -framework sfml-window -framework sfml-system

它已经成功编译和运行了!!!我现在非常高兴!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接