DXP GT – Fireplace
DXP GT – Mobile Footer Layer

C gmp installieren

Du schiebst sie in das Verzeichnis, in dem dein Linker die Bibliotheken sucht, oder in ein beliebiges anderes, das
du dem Linker sagst und linkst dann dagegen.

Für Näheres musst du wohl auch genauer werden, was den Problem ist.
 
Da kommen immer Linkererrors:

error LNK1120: 2 nicht aufgelöste externe

error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __cdecl __gmp_printf(char const *,...)" (?__gmp_printf@@$$J0YAHPBDZZ)" in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)".

error LNK2028: Nicht aufgelöstes Token (0A000039) ""extern "C" int __cdecl __gmp_printf(char const *,...)" (?__gmp_printf@@$$J0YAHPBDZZ)", auf das in Funktion ""int __cdecl main(void)" (?main@@$$HYAHXZ)" verwiesen wird.
 
Poste deinen Code und die Parameter, mit denen du Compiler/Linker aufrufst.
 
cx01 schrieb:
Poste deinen Code und die Parameter, mit denen du Compiler/Linker aufrufst.

Der Code ist nur ein Testcode von mir, also nicht wundern :D:
PHP:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <gmp-static/gmp.h>

int main()
{
    gmp_printf("Hallo!");
    getch();
    return 0;
}
Ich arbeite übrigends mit MS Visual Studio 2010, aber ich weiß nicht, wo diese Parameter sein sollen. :confused_alt:
 
Du musst in die Projekteigenschaften gehen und dann auf "Linker -> Eingabe". Da kannst du dann bei "Zusätzliche Abhängigkeiten" die lib-Datei von GMP eintragen.
Allerdings vermute ich mal, dass du garkeine Lib-Dateien hast. Ich weiß jetzt auch nicht, ob man GMP ohne weiteres unter Windows kompilieren kann; da musst du dich mal schlaumachen.
 
Hallo,

Ich hab die .lib Datei.
Ich weiß aber immer noch nocht was ich da eingeben soll.
 
Du musst bei den zusätzlichen Abhängigkeiten den Namen der Lib-Datei in die Liste hinzufügen.
 
Den kompletten Pfad?
Ergänzung ()

Frage hat sich erübrigt!
Aber jetzt kommt bei mir immer folgender Fehler: error LNK1104: Datei "LIBC.lib" kann nicht geöffnet werden.
LIBC.lib ist übringends nicht die gmp.lib.
 
Hm es könnte sein, dass die GMB-Library die LIBC benötigt. Allerdings weiss ich nicht, ob man die so einfach in Visual C++ reinbekommt. Ich würde eher nach einer anderen Version von der GMP-Library suchen, die kompatibel mit Visual C++ ist.
 
Die libc ist die C Standardbibliothek. Die sollte Windows eigentlich auch ohne Visual Studio mitliefern. Ohne geht nämlich mal so ziemlich gar nichts.
 
Wie die Datei in der die Standardbibliothek steckt heißt, ist doch völlig ohne Belang. Worum es geht ist, dass sie immer vorhanden sein muss.
Ich würde empfehlen, die Kommandozeile des Linkers zu korrigieren, dass er die richtige Datei nimmt. Die Funktionen der Standardbibliothek
sollten, egal wie diese heißt, auf jeden Fall vorhanden sein; aber kann natürlich sein, dass Microsoft auch da wieder sein eigenes Süppchen kocht.
 
Zuletzt bearbeitet:
Ich habe jetzt gmp.lib und libc.lib eingebunden.
Das Programm startet ohne Fehler, aber mit 4 Warnungen:

warning LNK4254: Abschnitt ".CRT" (40000040) in ".data" (C0000040) mit verschiedenen Attributen zusammengeführt

warning LNK4098: Standardbibliothek "MSVCRTD" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.

warning C4146: Einem vorzeichenlosen Typ wurde ein unärer Minus-Operator zugewiesen. Das Ergebnis ist weiterhin vorzeichenlos.

Nach dem starten erscheint allerdings dieses Fenster:
(Was mich auch noch interessiert ist, was der gelbe Pfeil unten rechts zu bedeuten hat: ntdll.dll!770af8c1()
 

Anhänge

  • pic.jpg
    pic.jpg
    157,4 KB · Aufrufe: 185
1. Gib deinem Präprozessor den richtigen Pfad um die Headerdatei zu finden. Einen absoluten Pfad im #include zu benutzen ist hässlich und funktioniert nirgendwo, außer bei dir (und im Zweifelsfall irgendwann nichtmal mehr da).
2. Die libc.lib ist wie gesagt die C Standardbibliothek. Das führt natürlich zu Konflikten, wenn der Linker seine eigene zusätzlich einbinden soll. Entferne eine von beiden.
3. Der erste Linkerfehler könnte damit zusammenhängen, muss aber nicht. Fixe das Problem zuerst.
4. Wenn du eine unsigned Variable hast, kannst du ihr kein Vorzeichen geben.
€:
5. Dein C-Programm hat die Endung .cpp. Das könnte dafür sorgen, dass statt einem C- ein C++ Compiler aufgerufen wird und du solltest es deshalb nicht tun.
6. Ich empfehle, main bei Erfolg EXIT_SUCCESS zurückgeben zu lassen, aber das hat nichts mit deinen Problemen zu tun und ist eine allgemeine Bemerkung.
 
Zuletzt bearbeitet:
Zurück
Oben