使用第三方库时,Netbeans无法加载共享库:SFML

时间:2018-11-15 09:46:44

标签: c++ netbeans shared-libraries mingw sfml

我知道存在类似的问题,我已经看过这些问题,在我决定必须询问之前,在排除故障的过程中,他们并没有运气。

我是C ++的新手,通过一门课学习它。我的作业要求我使用第三方库:SFML。我当前的编码设置是将Netbeans与C ++插件Windows 10一起使用。以前,我使用Cygwin编译器。 SFML声称它需要与编译时使用的其中一个编译器的确切版本一起使用,因此我选择了MinGW 7.3.0,此后已安装并继续尝试。

在“项目”->“属性”->“构建”->“ C ++编译器”中,我添加了SFML的includes目录:

  

“ C:/ Users / Drayux / Documents / Coding / NetBeans /第三方库/SFML-2.5.1/include”

在这里,在->预处理程序定义中,我还添加了:

  

SFML_STATIC

根据教程here的建议。

在“项目”->“属性”->“构建”->“链接器”中,我添加了SFML的lib和bin目录:

  

“ C:/ Users / Drayux / Documents / Coding / NetBeans /第三方库/SFML-2.5.1/bin”

     

“ C:/ Users / Drayux / Documents / Coding / NetBeans /第三方库/SFML-2.5.1/lib”

最后,我确保手动在链接器部分的库部分下分别添加每个库。也如上述教程所建议。

完成所有这些之后,我可以编写一个可以编译并运行的标准程序。但是,一旦我开始包含SFML库的标头,有时代码就可以构建,但是不能运行,而其他时候,它根本就不能一起构建。

使用以下示例代码:

#include <iostream>
using namespace std;

#include <SFML/Graphics.hpp>
using namespace sf;

int main() {
    cout << "Test output line" << endl;

    RenderWindow window(VideoMode(200, 200), "Hello there!");
    //CircleShape shape(100.f);

    return 0;
}

当我尝试在上述配置下构建它时,构建成功,但运行失败。这是两个控制台。

内部版本:

cd 'C:\Users\Drayux\Documents\Coding\NetBeans\Lab7C'
C:\Program Files\MinGW\MSYS\bin\make.exe -f Makefile CONF=Debug
"/C/Program Files/MinGW/MSYS/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make.exe[1]: Entering directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'
"/C/Program Files/MinGW/MSYS/bin/make.exe"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/lab7c.exe
make.exe[2]: Entering directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'
make.exe[2]: `dist/Debug/MinGW-Windows/lab7c.exe' is up to date.
make.exe[2]: Leaving directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'
make.exe[1]: Leaving directory `/c/Users/Drayux/Documents/Coding/NetBeans/Lab7C'

BUILD SUCCESSFUL (total time: 3s)

运行:

C:/Users/Drayux/Documents/Coding/NetBeans/Lab7C/dist/Debug/MinGW-Windows/lab7c.exe: error while loading shared libraries: sfml_window-d-2.dll: cannot open shared object file: No such file or directory

RUN FAILED (exit value 127, total time: 74ms)

我也尝试过在项目属性的“运行”下的环境部分添加LD_LIBRARY_PATH的解决方案,但是没有运气。

考虑到我的情况,没有其他解决方案,我感到束手无策。任何帮助将不胜感激。

谢谢, 利亚姆

2 个答案:

答案 0 :(得分:0)

您可能应该将-static传递给链接器参数,以防止链接此库的动态版本,或者在“我确保手动在链接器部分的库部分下分别添加每个库” 您还意外添加了库的动态版本,而不仅仅是添加了静态版本。

答案 1 :(得分:0)

经过许多小时甚至更晦涩难懂之后,我才能够成功运行基本的SFML程序并渲染基本的测试窗口。

我知道我还有很多东西要学,但是解决方案的解决方法是共享库(.dll文件)的位置。

我以为在链接器配置中引用它们可以完成此工作,但是.a库似乎在已编译程序的本地目录中查找它们。截至目前,我仍不知道如何更改此设置。

因此,该解决方案是将文件系统中的.dll文件手动移动到已编译程序的目录中,对于我而言:

  

C:\ Users \ Drayux \ Documents \ Coding \ NetBeans \ SFML Test \ dist \ Debug \ MinGW-Windows

希望这对以后解决我的问题的人有帮助!

相关问题