【发布时间】:2014-10-15 16:51:29
【问题描述】:
我最近安装了 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 linking error
在接受的答案中,该人说如果我想使用 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
然后,我将 sfml-audio.framework、sfml-window.framework、sfml-graphics.framework、sfml-network.framework 和 sfml-system.framework 放入我的 Frameworks 目录 (/Library/Frameworks)。
最后,我尝试通过以下方式编译我的程序:
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-systemg++ window.cpp -framework sfml-graphics -framework sfml-window -framework sfml-system
但是,我不断收到同样的错误。我继续在谷歌上搜索错误,但我得到的只是人们使用 Xcode 而不是终端的问题。任何帮助将不胜感激!
【问题讨论】:
-
非常感谢 Joachim Pileborg 编辑我的问题!
-
您的预构建 SFML 库似乎是使用 GCC(及其 libstdc++)构建的,而您使用的是 Clang(它使用 libc++)。要么尝试找到使用 Clang 和 libc++ 构建的 SFML 的预构建版本,要么下载源代码并自行构建。并且不要被你使用命令
g++来构建所迷惑,它实际上是在使用clang++。 -
我不知道达尔文框架如何影响这一点,但通常要使用带有 gcc/g++ 的库,您需要一个
-l选项来指定库(-L选项只指定一个目录搜索 - 编译器/链接器不会搜索那里的所有库,只搜索特定的库)。 -
啊,有趣,我不知道 g++。有没有类似于 g++ 的东西,我可以使用它来正确编译我已经拥有的东西,而不必再次重新下载 SFML?