2016-03-31 8 views
0

Ich versuche GLFW auf Windows zu verknüpfen.Verlinkung mit C-Bibliotheken unter Windows mit Dub

Unter Linux war es ziemlich einfach:

dependency "derelict-glfw3" version="~>2.0.0" 
subConfiguration "derelict-glfw3" "derelict-glfw3-static" 

sourceFiles "deps/glfw/build/src/libglfw3.a" platform="posix" 
libs"Xi" "pthread" "X11" "Xxf86vm" "Xrandr" "pthread" "GL" "GLU" "Xinerama" "Xcursor" platform="posix" 

Wenn ich versuche, mit einer DLL auf Windows zu verbinden, Dub mir sagt, dass Error: unrecognized file extension dll.

dependency "derelict-glfw3" version="~>2.0.0" 
subConfiguration "derelict-glfw3" "derelict-glfw3-static" 

sourceFiles "deps\\glfw\\build\\src\\Debug\\glfw3.dll" platform="windows" 

Wenn ich versuche, mit einem zu verknüpfen .lib, Dub sagt mir, dass COFF is not supported.

dependency "derelict-glfw3" version="~>2.0.0" 
subConfiguration "derelict-glfw3" "derelict-glfw3-static" 

sourceFiles "deps\\glfw\\build\\src\\Debug\\glfw3.lib" platform="windows" 

GLFW wurde mit vs2013 gebaut. Was muss ich anders machen?

+1

versuchen, es mit 'dflags" -m64 "' oder 'dflags" -m32mscoff "' – WebFreak001

+0

'-m32mscoff' zu kompilieren führt zu Tonnen von Linkerfehlern für meinen D-Code und' -m64' resultiert in einem internen Compilerfehler. Ich denke, das passiert, weil die .lib für 32bit gebaut ist. –

+0

Nein, ich habe gerade auch eine 64-Bit-Prebuilt-.lib von der GLFW-Site ausprobiert und bekomme auch einen internen Compilerfehler. –

Antwort

2

Es gibt drei Fälle hier:

  • Standard 32-Bit-Windows-Build. dmd unter Windows erstellt standardmäßig 32 Bit im alten OMF-Linkerformat. Sie können nicht direkt mit einer DLL verknüpfen und benötigen eine .lib. Aber da es das alte Format verwendet, werden die meisten .libs nicht funktionieren - Sie müssen Ihre eigenen erstellen.

(lol ich mag dies in der Liste Artikel aber Abschlag saugt was auch immer.)

Downloads diese Sache IMPLIB.EXE zu bekommen: http://ftp.digitalmars.com/bup.zip und dass eine LIB aus der DLL zu machen verwenden: implib /s yourdll.lib yourdll.dll und versuche mit der neuen lib zu verlinken. (Fügen Sie es der Dateiliste hinzu, wie Sie es bereits tun)

Wenn es nicht funktioniert, versuchen Sie den Befehl erneut, aber diesmal ohne den Schalter /s.

Es sollte bis dahin funktionieren.

  • -m32mscoff 32-Bit-Builds. Mit diesem Flag an dmd wird ein 32-Bit-Programm ausgegeben, das das neue COFF-Format anstelle des alten omf-Formats verwendet. Damit es funktioniert, muss link.exe in Ihrem Pfad der Microsoft-Linker sein, von Visual Studio, anstelle der Standard-Digital-Mars optlink.exe (die bis vor kurzem auch link.exe genannt wurde. Das war schön, als es ein kompatibler Ersatz für war der Microsoft One .... vor zwanzig Jahren ...). Verwendung vorhandener .lib Dateien aus den dlls

Wie auch immer, wenn Sie den Microsoft C++ Compiler und Linker installiert haben und setzen diese link.exe in Ihrem Pfad, sollte dmd -m32mscoff arbeiten.

TIPP: Wenn Sie das Windows-Installationsprogramm für dmd verwendet haben, öffnen Sie die "D2 64-Bit-Eingabeaufforderung" aus dem Startmenü, um den Pfad einzurichten. Es wird Ihnen sagen, -m64 zu verwenden, aber Sie können auch -m32mscoff aus dieser Umgebung verwenden, und es sollte funktionieren. wenn alles richtig installiert ist.

  • -m64 64-Bit-Builds. Im Grunde das selbe wie der mscoff Schalter - Sie benötigen den Visual C++ Linker in Ihrem Pfad - aber tut 64 Bit anstelle von 32. Natürlich erfordert dies eine 64 Bit dll und lib, um auch dort zu sein.

In den Kommentaren, es klingt wie Sie auch einige Fehler konfrontiert werden könnte, weiß ich nicht darüber, das oben ist, wenn alles andere funktioniert einwandfrei.