c++ - Netbeans C++ 项目上的 SFML 错误
问题描述
我正在使用 Netbeans(在 Windows 上)开发 c++。我正试图让 SMFL 工作。
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
using namespace std;
/*
*
*/
int main(int argc, char** argv)
{
RenderWindow window(VideoMode(600, 800), "TITLE");
cout << "Hello World!";
return 0;
}
当我启动应用程序时,我收到以下错误。
main.cpp:31: undefined reference to `__imp__ZN2sf6StringC1EPKcRKSt6locale'
main.cpp:31: undefined reference to `__imp__ZN2sf9VideoModeC1Ejjj'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSettingsE'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'
main.cpp:31: undefined reference to `__imp__ZN2sf12RenderWindowD1Ev'
第 31 行是
RenderWindow window(VideoMode(600, 800), "TITLE");
我在 c++ 编译器中添加了 SFML/include 目录,在链接器中添加了 SFML/lib,你能帮帮我吗?
编辑:重试添加 lib 并包含文件夹后,现在我得到:“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”
解决方案
您必须告诉 NetBeans 三件事:
- SFML 包含文件的目录
- SFML 库目录
- 要链接的 SFML 库列表
看起来您已经知道如何执行 #1,但我会重复所有内容以防万一。所有这些设置都应使用项目属性完成 - 右键单击您的项目名称,然后打开属性设置窗口。您需要在两个窗格中进行添加 - “C++ 编译器”和“链接器”。
“C++ 编译器”窗格是您首先需要的。找到“包含目录”行并单击带有三个点的正方形(目录选择器) - 然后添加 SFML“包含”目录。在我的情况下,此窗格如下:
“链接器”窗格是下一个。找到“附加库目录”并添加 SFML“lib”目录 - 也使用目录选择器。然后找到“库”行并添加至少三个库 - “sfml-graphics”、“sfml-window”和“sfml-system”。为此,您需要使用稍微复杂的选择器,您需要的按钮是“添加库...” - 请参见此处的第三张图片。图书馆的顺序很重要。在我的情况下,此窗格如下:
这是库选择器 - 使用“添加库...”按钮
同样在您的示例中,您需要为 SFML 类型使用前缀“sf::”:
sf::RenderWindow window(sf::VideoMode(600, 800), "TITLE");
加法。看起来(来自评论)编译和链接问题已经解决,但是应用程序仍然找不到 SFML 动态库。此问题不在 NetBeans 范围内 - 您只需确保包含动态库的 SFML 目录已添加到 Windows 系统路径中。
这个目录名可以很长,所以添加到路径时很容易打错。有一个简单的方法来验证 - 一个 Windows 工具where.exe
。某些 Windows 系统没有此工具 - 因此您可以通过path
命令输出当前路径,然后将路径中与 SFML 相关的部分复制粘贴为 Unixls
命令的参数(它在 MinGW MSYS 环境中)。通常ls
会显示 SFML 动态库列表(带dll
扩展名)。
推荐阅读
- ggplot2 - 安排地块的困难
- html - 导航栏面板与文本重叠
- reactjs - 搜索功能在 React 中无法始终如一地工作
- python - 分配前引用的 /cart/slug/ 局部变量“产品”处的 UnboundLocalError
- html - 字体真棒图标加载“移位”一个角度
- javascript - 如何使用 javaScript 设置服务器端面板的数据源
- javascript - 在打字稿中完成异步函数后的事件
- android - Android Studio:R 文件未更新
- android - 由于 SecurityException: Permission Denial,无法通过 adb 或 Appium 服务器运行 Android 应用程序
- python - 如何在熊猫数据框中仅填充选定列的空值?