0

在使用其他语言(如 C++ 和 Java)之后,我已经使用 D 大约一个月了。我一直想将我的简单游戏平台从 Java 迁移到 D,我想使用 Derelict3 库来做到这一点。我已经编译了位于这里的 github 存储库https://github.com/aldacron/Derelict3

运行 Linux,如果有帮助的话。

我已将 .a 文件放在/usr/lib/..中,并将 .d 文件(来自 Derelict 根目录的导入文件夹)放在/usr/include/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
4

1 回答 1

2

ld,链接器维护一个未解析符号的列表,因为它首先通过库进行链接,试图减少其未解析的列表。这意味着任何依赖项都应该列依赖它们的代码之后。因此,请尝试像这样重新安排您的 pragma(libs...):

pragma(lib, "DerelictGL3"); 
pragma(lib, "DerelictGLFW3"); 
pragma(lib, "DerelictUtil"); 
pragma(lib, "dl");
于 2012-05-14T17:31:38.727 回答