Xcode,SFML错误dyld:库未加载

6

我想开始一个基本的C++项目,并链接SFML库。 我将SFML库解压到文件夹/Users/mulperi/cpplib/sfml中, 并将其添加到Include Search PathLibrary Search Path

我的代码很简单,我在Youtube上跟了一个教程(也尝试过不同的现成代码):

#include <iostream>
#include <SFML/Graphics.hpp>
int main() {
    sf::RenderWindow window(sf::VideoMode(640, 480), "First SML Window");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            switch (event.type) {
                case sf::Event::Closed:
                    window.close();
                    break;
                default:
                    break;
            }
        }
        window.clear();
        window.display();
    }
    return 0;
}

构建成功,所以路径应该是正确的。但我并没有看到窗口,而是看到了这些输出信息: 线程1:
dyld`__abort_with_payload:
    0x10003b1e0 <+0>:  movl   $0x2000209, %eax          ; imm = 0x2000209 
    0x10003b1e5 <+5>:  movq   %rcx, %r10
    0x10003b1e8 <+8>:  syscall 
->  0x10003b1ea <+10>: jae    0x10003b1f4               ; <+20>
    0x10003b1ec <+12>: movq   %rax, %rdi
    0x10003b1ef <+15>: jmp    0x10003aa48               ; cerror_nocancel
    0x10003b1f4 <+20>: retq   
    0x10003b1f5 <+21>: nop    
    0x10003b1f6 <+22>: nop    
    0x10003b1f7 <+23>: nop    

输出:

dyld: Library not loaded: @rpath/libsfml-system.2.5.dylib
  Referenced from: /Users/mulperi/Library/Developer/Xcode/DerivedData/sfml_1-cgodahbmxiufqnhhglbsyfuzvdvz/Build/Products/Debug/sfml_1
  Reason: image not found
(lldb) 

我正在使用 High Sierra 10.13.4 上的 Xcode 9.3.1。
更新: 我还尝试将 SFML 文件夹移动到项目文件夹中,甚至尝试按照 SFML 教程将 include、libs、frameworks、extlibs 拆分到 /usr/local 中,但始终得到相同的输出。
这是我的设置图片: Folder structure Header search path Library search path Added frameworks too The output
3个回答

9

经过仔细阅读入门指南,我终于让它正常工作了。在Mac上,他们建议使用框架文件,所以我做的是:

  1. 将SFML/Frameworks和SFML/extlibs的内容复制到 /Library/Frameworks 中
  2. Xcode项目“Build Phases” -> “Link Binary with Libraries” -> 从 /Library/Frameworks 文件夹中添加每个SFML框架(无需添加extlib框架)

注意:使用此方法不需要添加“Include Search Paths”或“Library Search Paths”。


正是我所需要的。谢谢! - ultimoTG
5
在macOS 10.15.4上,Xcode版本为11.4.1(11E503a),仍然无法运行。Xcode对框架文件的签名进行了抱怨,并停止了编译过程。 - Eduardo Pereira
1
@EduardoPereira 你需要前往Mac的系统偏好设置,选择安全选项,然后逐个为每个框架单独授予权限。 - Mulperi
在我的情况下,除了其他提到的事情之外,我还需要前往“签名和功能”->“强化运行时”->勾选“禁用库验证”。 - CJ_COIMBRA

1
在Catalina上,由于出现了类似以下错误的问题,所以原先被接受的解决方案似乎不再起作用:
sfml-audio.framework无法打开,因为开发者无法验证。
对我来说,使用Homebrew解决了这个问题:
1. 运行brew install sfml。 2. 然后在Xcode中通过以下步骤链接Homebrew安装的库: - 导航到Xcode上的“Link Binaries With Libraries”部分 - 从/usr/local/Cellar/sfml/x.x.x/lib目录中拖放SFML库文件 3. 单击“Build and Run”。项目现在应该能够成功构建和运行。

1
我做的完全一样,但还没有解决源代码的问题。 - Malov Vladimir

1

我在 2020年的MacOS Catalina 10.15.4上尝试以下步骤:

要在Xcode中使用SFML,请尝试以下操作:

--> 1. 使用以下命令安装sfml依赖项:$ brew install sfml

--> 2. 进入Xcode项目并添加以下内容(非常重要):

在“Header Search Paths”中添加“/usr/local/Cellar/sfml/2.5.1/include”

在“Library Search aths”中添加“/usr/local/Cellar/sfml/2.5.1/lib”

2.5.1是sfml的版本,请根据您当前的版本进行尝试。

--> 3. 进入“Build Phases / Link Binary with Libraries”部分,并添加所有“dylib”文件:

  • '''-network.'''.dylib。
  • '''-window.'''.dylib。
  • '''-audio.'''.dylib。
  • '''-system.'''.dylib。
  • '''-graphics.'''.dylib。

-->4. 最后,运行你的项目。

确认所有的头文件都已经正确添加到程序文件的顶部,并且命名空间已经正确放置,如下所示:

#include <SFML/Graphics.hpp>

#include <iostream>

using namespace sf;


1
我做了相同的步骤,但出现了源代码问题。程序已编译和链接,但出现了SIGABRT错误,并输出“dyld: Library not loaded: @rpath/libsfml-system.2.5.dylib”。 - Malov Vladimir

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