架构x86_64错误的未定义符号

SFML 2.1 Undefined symbols for architecture x86_64 error

本文关键字:未定义 符号 错误 x86 架构      更新时间:2023-10-16

我最近安装了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 -通用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

然后,我把sml -audio.framework、sml -window.framework、sml -graphics.framework、sml -network.framework和sml -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指出的,我需要为mac安装clang版本的SFML,因为我使用g++来编译,这是伪装的clang++, Joachim Pileborg也指出了这一点。接下来,我必须再次浏览使用Linux设置SFML的说明(http://www.sfml-dev.org/tutorials/2.0/start-linux.php)。

然而,锦上添花的是当我读到这个问题时:

OSX GCC如何指定sfml库源?

…这个问题:

在XCode中构建时出现FreeType错误

…这让我想到:也许我应该尝试移动我的freetype.framework文件夹(可以在extlibs目录中找到)到我的/Library/Frameworks目录。一旦我这样做并使用

进行编译
g++ window.cpp -framework sfml-graphics -framework sfml-window -framework sfml-system

编译并运行成功!我现在很开心!