2012-05-12 2 views
0

J'ai utilisé D depuis environ un mois maintenant après avoir utilisé d'autres langages tels que C++ et Java. J'ai voulu déplacer ma plate-forme de jeu simple de Java vers D, et j'aimerais utiliser la bibliothèque Derelict3 pour le faire. J'ai compilé le référentiel github situé ici https://github.com/aldacron/Derelict3Utilisation de Derelict3 sous DMD2 (D)

En cours d'exécution Linux, si cela aide.

J'ai placé mes fichiers dans .a /usr/lib/.. et je l'ai placé mes fichiers .d (Le dossier d'importation à partir du répertoire racine Derelict) dans /usr/include/i386- linux-gnu/DMD/druntime/import

Mon code est le suivant:

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"); 
} 

Ceci est basé sur d'autres questions qui ont été répondu sur stackoverflow et certains sujets des forums dlang.org, mais le le terminal me crache dessus quand je compile:

[email protected]:~$ 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

Ne connaissez pas votre problème réel, mais voici un point important. Essayez de ne pas utiliser les chemins absolus vers les bibliothèques. Sur un autre ordinateur que le vôtre, ce code provoquera une erreur de compilation s'il n'y a pas de bibliothèques sur le chemin spécifié. Utilisez les indicateurs du compilateur ou le système de construction pour gérer les dépendances de la bibliothèque. –

+0

Je pense que votre 'libDerelictUtil.a' est la version Derelict2. – dav1d

+0

Ce n'est pas moi qui l'ai téléchargé directement du dépôt Derelict3. – KevinRK

Répondre

2

ld, l'éditeur de liens maintient une liste des symboles non résolus comme il se déplace d'abord durer à travers les bibliothèques pour relier, en essayant de réduire sa liste des unresolveds. Cela signifie que toutes les dépendances doivent être listées après le code qui en dépend. Alors essayez de réorganiser votre pragma (libs ...) comme ceci:

pragma(lib, "DerelictGL3"); 
pragma(lib, "DerelictGLFW3"); 
pragma(lib, "DerelictUtil"); 
pragma(lib, "dl"); 
Questions connexes