2016-03-26 6 views
0

Ist es möglich, GMP in einer freistehenden Umgebung zu verwenden?Verwendung von GMP in freistehenden Programmen

Ich arbeite an einem Programm, das auf Bare Metal laufen muss (um Overhead zu reduzieren und auch für Sicherheitszwecke - außerhalb Code ist nicht erlaubt), zwingt mich, einen minimalistischen Kernel zu erstellen, aber ich muss auch GMP verwenden für beliebig große ganze Zahlen. Ich habe mir Mini-GMP angeschaut, allerdings scheint es um Größenordnungen langsamer zu sein als echter (voller) GMP.

Bitte beachten Sie: Ich habe bei this Frage sah, aber es scheint keine Antworten anderer als der, in dem die OP sagte er mit Mini-GMP glücklich war ..

+0

Welche Probleme treten bei der Verwendung von GMP auf? –

+0

@OliverCharlesworth GMP funktioniert gut für normale Programme, aber wenn es in einem Programm verwendet wird, das mit -freestanding kompiliert wird, meldet der Linker undefinierte Referenzfehler, wenn eine GMP-Funktion verwendet wird. – aleks

+0

Eine freistehende Umgebung stellt nicht unbedingt die C-Standardbibliothek bereit. Wenn Sie Standardbibliotheksfunktionen in einer solchen Umgebung verwenden oder eine Bibliothek eines Drittanbieters verwenden möchten, müssen Sie bereit sein, eigene Implementierungen der erforderlichen Funktionen bereitzustellen. Das ist sicherlich möglich, aber es könnte sich herausstellen, dass es sich um eine ziemlich große Anzahl von Funktionen handelt, die bereitgestellt werden müssen, und Sie müssen darauf achten, dass Ihre Implementierungen konform sind. –

Antwort

0

sollten Sie in der Lage sein, statisch zu verknüpfen Bibliotheken in eine freistehende ausführbare Datei. Es ist wie das Verknüpfen von mehr Objektdateien.

Erstellen Sie also eine statische Version von GMP (idealerweise mit -march=atom oder was auch immer für Ihre Zielhardware geeignet ist). Setzen Sie libgmp.a irgendwo und verwenden Sie -Ldir, um dem Compiler mitzuteilen, wo.

Ich habe das selbst nicht für GMP ausprobiert, daher kann ich nicht garantieren, dass es beim Erstellen eines statischen GMP keine Komplikationen gibt, aber die Build-Skripte für die meisten Pakete enthalten eine Option zum Erstellen statischer Bibliotheken. (z. B. --enable-static)