Xcode,SFML 错误 dyld:未加载库
Xcode, SFML error dyld: Library not loaded
我正在尝试使用 link 到 SFML 库来启动一个基本的 C++ 项目。
我已将 SFML 库解压缩到文件夹 /Users/mulperi/cpplib/sfml
我已将其添加到 Include Search Path 和 Library 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;
}
构建成功,所以路径应该没问题。我没有得到 window,而是有这些输出:
线程 1:
dyld`__abort_with_payload:
0x10003b1e0 <+0>: movl [=12=]x2000209, %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 tu /usr/local,但我总是得到相同的输出。
这是我的设置图片
好的,我再次仔细阅读了入门教程后就可以使用了。在 Mac,他们推荐使用框架文件,所以我所做的是:
- 将SFML/Frameworks和SFML/extlibs的内容复制到/Library/Frameworks
- Xcode project Build phases -> Link Binary with Libraries -> 添加 /Library/Frameworks 文件夹中的每个 SFML 框架(无需添加 extlib 框架)
注意:使用此方法无需添加包含搜索路径或库搜索路径。
在 Catalina 上,由于以下错误,已接受的解决方案似乎不再有效:
sfml-audio.framework cannot be opened because the developer cannot be verified
使用自制软件为我解决了这个问题:
brew install sfml
。然后在 Xcode link 上由 homebre 安装的库:
导航到 Xcode 上的 'Link Binaries With Libraries' 部分,从 /usr/local/Cellar/sfml/x.x.x/lib
目录拖放 sfml 库
单击构建并 运行。项目现在应该构建并且 运行 成功
我尝试了 MacOS Catalina 10.15.4(2020 年)中的后续步骤:
为了在 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;
我正在尝试使用 link 到 SFML 库来启动一个基本的 C++ 项目。 我已将 SFML 库解压缩到文件夹 /Users/mulperi/cpplib/sfml 我已将其添加到 Include Search Path 和 Library 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;
}
构建成功,所以路径应该没问题。我没有得到 window,而是有这些输出:
线程 1:
dyld`__abort_with_payload:
0x10003b1e0 <+0>: movl [=12=]x2000209, %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 tu /usr/local,但我总是得到相同的输出。
这是我的设置图片
好的,我再次仔细阅读了入门教程后就可以使用了。在 Mac,他们推荐使用框架文件,所以我所做的是:
- 将SFML/Frameworks和SFML/extlibs的内容复制到/Library/Frameworks
- Xcode project Build phases -> Link Binary with Libraries -> 添加 /Library/Frameworks 文件夹中的每个 SFML 框架(无需添加 extlib 框架)
注意:使用此方法无需添加包含搜索路径或库搜索路径。
在 Catalina 上,由于以下错误,已接受的解决方案似乎不再有效:
sfml-audio.framework cannot be opened because the developer cannot be verified
使用自制软件为我解决了这个问题:
brew install sfml
。然后在 Xcode link 上由 homebre 安装的库:导航到 Xcode 上的 'Link Binaries With Libraries' 部分,从
/usr/local/Cellar/sfml/x.x.x/lib
目录拖放 sfml 库单击构建并 运行。项目现在应该构建并且 运行 成功
我尝试了 MacOS Catalina 10.15.4(2020 年)中的后续步骤:
为了在 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;