在使用其他语言(如C ++和Java)之后,我一直在使用D大约一个月。我一直想将我的简单游戏平台从Java移到D,我想使用Derelict3库来实现这一目标。我编译了位于https://github.com/aldacron/Derelict3
的github存储库运行Linux,如果有帮助的话。
我已将.a文件放在 / usr / lib /..中,并且我已将<。>文件(Dereliclic根目录中的import文件夹)放在 /中USR /包括/ I386-Linux的GNU / DMD / druntime /导入
我的代码如下:
import std.stdio;
import derelict.opengl3.gl3;
import derelict.glfw3.glfw3;
pragma(lib, "/usr/lib/libDerelictUtil.a");
pragma(lib, "/usr/lib/libDerelictGL3.a");
pragma(lib, "/usr/lib/libDerelictGLFW3.a");
void main() {
DerelictGL3.load();
writeln("This is a line");
}
这是基于stackoverflow上回答的其他问题以及dlang.org论坛中的一些主题,但是当我编译时终端向我吐出这个问题:
kevin@kevin-Latitude-D620:~$ dmd main.d
/usr/include/D/Derelict/libDerelictGL3.a(gl3.o): In function `_D8derelict7opengl33gl318_sharedStaticDtor2FZv':
../import/derelict/opengl3/gl3.d:(.text._D8derelict7opengl33gl318_sharedStaticDtor2FZv+0x4): undefined reference to `_D8derelict4util6loader15SharedLibLoader19isAutoUnloadEnabledOFNdZb'
/usr/include/D/Derelict/libDerelictGL3.a(gl3_d1_649.o):(.data+0x38): undefined reference to `_D8derelict4util6loader15SharedLibLoader7__ClassZ'
/usr/include/D/Derelict/libDerelictGL3.a(gl3_d1_649.o):(.rodata+0x4418): undefined reference to `_D8derelict4util6loader15SharedLibLoader4loadMFZv'
(MORE of the above)
collect2: ld returned 1 exit status
--- errorlevel 1
答案 0 :(得分:2)
ld ,链接器维护一个未解析的符号列表,因为它首先移动到要链接的库,尝试减少其未解析的列表。这意味着任何依赖项都应列在之后依赖于它们的代码。所以尝试重新安排你的pragma(libs ......),如下所示:
pragma(lib, "DerelictGL3");
pragma(lib, "DerelictGLFW3");
pragma(lib, "DerelictUtil");
pragma(lib, "dl");