使用SFML与GCC和OS X时遇到问题

时间:2012-04-11 18:19:57

标签: c++ linker sfml

我一直在努力让SFML工作一段时间,我一直在尝试使用GCC。顺便说一句,我在OS X上。我遵循标准的Linux指令并使用Linux 64位下载,但是在编译时......

g++ -o testing main.cpp -lsfml-system

发生这种情况:

main.cpp: In function ‘int main()’:
main.cpp:7: error: ‘class sf::Clock’ has no member named ‘GetElapsedTime’
main.cpp:9: error: ‘class sf::Clock’ has no member named ‘GetElapsedTime’
main.cpp:10: error: ‘Sleep’ is not a member of ‘sf’

所以我认为可能是由于没有使用includes,所以我将我的gcc编译命令更改为:

 g++ -o testing main.cpp -I ~/SFML-1.6/include/ -lsfml-system

现在我收到了这个错误:

ld: warning: ignoring file /usr/local/lib/libsfml-system.so, file was built for     unsupported file format which is not the architecture being linked (x86_64)
Undefined symbols for architecture x86_64:
  "sf::Clock::Clock()", referenced from:
      _main in ccZEiB7b.o
  "sf::Clock::GetElapsedTime() const", referenced from:
      _main in ccZEiB7b.o
  "sf::Sleep(float)", referenced from:
      _main in ccZEiB7b.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status**

我不知道如何解决它。

2 个答案:

答案 0 :(得分:2)

简短回答

添加-arch i386(在mac上)或-m32(在linux上)标志

答案很长

您的sfml-system库是以32位构建的,而您尝试以64位编译程序。所以你的程序无法链接到库。

如果可能,以64位重新编译SFML,您应该能够以64位编译程序。

答案 1 :(得分:0)

SFML希望您在OS X上使用框架。打开SFML文件夹并将lib64下的所有文件夹复制到/ Library / Frameworks(即将SFML.framework,sfml-system.framework等复制到/ Library /框架)。

一旦安装了框架,就可以通过将-framework命令传递给g ++来使用它们,如下所示:

g++ -o testing main.cpp -framework SFML -framework sfml-system