Gebäude statische Bibliotheken für windows mit cygwin
Ich versuche zu bauen CGAL für windows zu verwenden in meinem Projekt unter Visual Studio 2010. CGAL erfordert GMP und MPFR Bibliotheken und stellt Sie in die Verteilung. Jedoch bietet Ihnen als lib+dll-bundle, während ich möchte, dass Sie kompiliert werden, statisch in form einer single .lib-Datei.
So, ich bin jetzt versuchen zu bauen GMP und MPFR als statische Bibliothek unter windows. Ich bin mit cygwin für diesen Zweck vorgeschlagen hier. Nach Aufruf configure
und make
ich habe die Ausgabe libs mit .a
Erweiterung mit zusätzlichen .la
- Datei. Ich weiß wirklich nicht viel über statische Bibliotheken für Unix, also schlug ich vor es ist das gleiche wie .lib
mit nur andere Endung. Ich benannte Sie um .lib und mit meinem Projekt - es passte gut.
Die erste Frage: ich war richtig das zu tun? Sind die .einem und .lib-Dateien wirklich die gleichen? Ich sah diese Frage, aber fand es nicht nützlich genug.
Dann das problem entstanden ist: ich hatte
error LNK2019: unresolved external symbol ___getreent referenced in function ___gmp_default_reallocate
Scheint, wie einige cygwin-Funktionen sind nicht mit im daraus resultierenden gmp.lib
. Ich fand hier, dass getreent
exportiert werden darf aus libcygwin.a
. Also kopierte ich es auf libcygwin.lib
und mit meinem Projekt. Nicht überraschend, erhielt ich die folgende Fehlermeldung:
error LNK2005: _strcpy already defined in libcygwin.lib(t-d001719.o) in libcmtd.lib(strcat.obj)
Natürlich kann ich nicht wissen, welche Funktionen und wie werden Sie erklärt, in dieser Bibliothek und scheint, wie strcpy
Konflikt mit einem von Visual Studio. Was ich wirklich will, geschehen ist gmp.lib
schlau genug wäre, um den link dieser Funktion statisch. So,
Die zweite Frage: wie Kraft GMP-link library-Abhängigkeiten? oder, Wie man richtig bauen GMP für windows ohne cygwin?
InformationsquelleAutor Mikhail | 2012-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: Sehen Sie die MPIR-Projekt Seite für die Antwort auf alle Ihre Probleme (es ermöglicht den Bau von MPIR, GMP-kompatiblen Bibliothek, und MPFR mit Visual Studio). Die neue MPIR homepage befindet sich hier, aber es fehlt die MPFR-info, wie weit ich es sagen kann.
Wollen Sie nicht Cygwin.
Müssen Sie eine Bash-shell und MinGW(.org/-w64). Wenn Sie mit der cygwin-compiler, die Sie benötigen, um einen link zu der Cygwin-DLL, die in deinem Fall doof ist, wie GMP und MPFR beide sind erstellbar, die von MinGW.
Das Ding ist nur: ich glaube nicht, dass entweder die Bibliothek ist bebaubar, von MSVC, und MSVC kann keine Verbindung mit MinGW Bibliotheken (dies ist genau der Grund, für Ihr Projekt die Autoren gebündelt DLL-Dateien und Bibliotheken importieren), so müssen Sie bauen alles mit MinGW-GCC oder verwenden Sie den DLL ' s.
Nachfolgend finden Sie Anweisungen für das erstellen einer GCC statische Bibliothek von GMP und MPFR.
Um zu bauen GMP für Windows mit MinGW-w64 GCC, müssen Sie MSYS. Entpacke diese irgendwo wie C:\Dev\msys so, C:\Dev\msys\bin\sh.exe vorhanden ist.
Dann brauchen Sie einen MinGW-w64 GCC:
(Ich empfehle meine "Persönliche Builds", vor allem die 4.6.3-1-Paket. Download der 4.6.3-1-gcc_rubenvb.7z-Paket, aber alle anderen MinGW-bundle tun sollte)
Entpacken, das zu sagen C:\Dev\mingw64 so, C:\Dev\mingw64\bin\gcc.exe vorhanden ist.
Doppel-klicken Sie auf C:\Dev\msys\msys.bat. Typ:
Und drücken Sie die EINGABETASTE. Entpacken Sie die GMP-und MPFR Quelle in das /home/USERNAME/* Verzeichnis, erstellen Verzeichnisse, und denken Sie daran, verwenden Sie zum konfigurieren:
zusammen mit
für 32-bit-oder
für 64-bit. Ich glaube, GMP erfordert auch
--build
auf den gleichen Wert gesetzt. Nachdem die Konfiguration abgeschlossen ist, gebenmake
, und dannmake install
Optional vorangestelltmake check
.Sollten Sie libgmp.ein in /easytemplibinstalldir/lib. Für MPFR, fügen Sie
seiner configure-Zeile.
Müssen Sie manuell verbinden Sie libgmp und libmpfr in der richtigen Reihenfolge für Sie zu arbeiten, keine automatische Abhängigkeit Verlinkung ist möglich, unter Windows für.
oh Nein, es geht nicht. MinGW-GCC erzeugt eine
.a
- Datei, keine.lib
beteiligt. MSVC kümmert sich nicht darum, GCC-Ausgabeformat, warum sollte es in der Lage sein link? GCC auf der anderen Seite können link zur 32-bit -.lib
- Dateien von MSVC, da einige GCC/binutils-dev gepflegt genug, um es überhaupt möglich ist.Also, du meinst, es gibt jetzt die Möglichkeit zur Erstellung von GMP-static .lib unter Windows überhaupt? Das ist ziemlich verwirrend. Warum bin ich in der Lage, gmp.eine Datei produziert von cygwin mit MSVC?
Ich weiß nicht, einen Weg zu bauen GMP mit MSVC. Es ist nichts verwirrend: GMP ist ein GNU-Projekt, verwendet C99-und MSVC nicht bekommen, zusammen mit einer von Ihnen. Ich denke, es gibt nur begrenzte Kompatibilität der Dateiformate (siehe hier zum Beispiel), aber die Verknüpfung der Cygwin-code mit MSVC ist nach ärger. Siehe update für leicht googleable Informationen.
InformationsquelleAutor rubenvb