einschließlich externer Header, die Compileroptionen ermitteln

9

Sprich ich finde eine sehr nette Open Source Bibliothek im Internet und jetzt möchte ich sie für mein eigenes Projekt verwenden.

Ich lade es herunter, kompiliere es möglicherweise und erhalte die Header-Dateien & amp; die statische / dynamische Bibliothek.

Also fange ich an, meine eigenen Quelldateien zu schreiben, und natürlich, wenn ich Funktionalität aus dieser externen Bibliothek verwenden möchte, füge ich die richtigen Header davon in meine Quelldateien ein.

Jetzt kompiliere ich meine Quelldatei, stelle sicher, dass die Include-Pfade und Linker-Optionen für diese externe Bibliothek korrekt eingestellt sind.

Und ich bekomme eine Menge Fehler, die alle von den externen Headern kommen. Es stellt sich heraus, dass sie einige Compiler-Flags benötigen.

Wie finde ich die minimalen Compiler-Flags heraus, die ich setzen muss (um Header aus einer externen Bibliothek kompilieren zu können)?

Was ich bisher darüber gedacht habe:

  1. Schlage sie im Bau-Skript der Quelle nach (kann ziemlich schwierig sein, da es viele Orte gibt, an denen sie definiert werden können und sie nicht die minimalen Flags sind, da sie für alle Header zusammen benötigt werden, aber nicht für bestimmte, die ich benutze)
  2. Google jede Fehlermeldung und hoffentlich wird das die Antwort geben (kann mit vielen Fehlermeldungen schwer sein und Google kennt vielleicht die Antwort nicht, oder ich weiß vielleicht nicht die richtigen Schlüsselwörter, um die Antwort zu finden)
  3. Vielleicht kann ich das Build-Skript der externen Bibliothek irgendwie in mein eigenes Projekt "einbinden" (das könnte sehr schwierig sein, da ich vielleicht ein anderes Build-System verwenden möchte und wahrscheinlich das Build-System selbst vollständig verstehen müsste) könnte für größere Bibliotheken schwer sein)
DevBen 26.08.2012, 19:49
quelle

2 Antworten

1

Jede gut erzogene Open-Source-Bibliothek wird mit Anweisungen zur Verwendung ihrer Entwicklungsdateien geliefert. Auf GNU / Linux-Systemen ist es üblich, pkg-config -Dateien (* .pc) gemeinsam in Entwicklungsheadern und Bibliotheken zu installieren In diesem Fall wird pkg-config --cflags library-name über die erforderlichen Kompilierungsoptionen informieren.

Wo pkg-config verwendet werden kann, ist es nur eine Frage des Build-Systems, welche Komponenten Sie importieren möchten. Z.B. auf Autotools.

%Vor%

Und dann nutzen Sie DEPS_CFLAGS und DEPS_LIBS Variablen für .am-Dateien.

z. in einer Shell-Befehlszeile:

%Vor%

Wie auch immer, es wäre produktiver, wenn Sie spezifische Informationen über die verwendete Bibliothek und die Fehler, die generiert werden, veröffentlichen können.

    
milton 28.08.2012, 17:32
quelle
0

Bei einem Header ist es sehr selten, dass Fehler in den Flags des Compilers auftreten, oder es ist sehr einfach, ihn in diesem Header zu lösen (zum Beispiel mit #ifdef .. # endif oder versuchen, einen Teil des Codes mit zu schreiben ein besser bekanntes Muster).

aber mehr möglichen Fehler ist in etwa so: Sie Header direkt enthalten, aber dieser Header ist abhängig von einem anderen Header (möglicherweise von System oder aus der gleichen Bibliothek) und Sie vergessen, sie vor Haupt-Include-Datei zu integrieren (eigentlich ist dies gemeinsame Datei zwischen Programmierer, die vergessen, ihre Header Standalone zu machen, vergessen sie einfach alle erforderlichen Header ihrer Datei in der richtigen Reihenfolge in der Haupt-Include-Datei enthalten) Um also nach diesem Kriterium zu suchen, schauen Sie in den Quellcode der Bibliothek (dass Sie sagen, dass sie korrekt kompiliert ist). Sehen Sie, was vor der Include-Datei enthalten war, und Sie werden feststellen, dass Ihre Include-Datei abhängig von Include-Dateien ist, die davor enthalten waren.

Zum Beispiel können Sie sowohl in MSVC als auch in GCC vorkompilierte Header verwenden, und jedes Include in den vorkompilierten Headern wird automatisch in alle Quelldateien eingeschlossen, die es enthalten. Wenn Sie also vergessen, etwas in einem Ihrer öffentlichen Header hinzuzufügen und in das vorkompilierte Header aufzunehmen header Ihr Code wird korrekt kompiliert, aber wenn jemand Ihren öffentlichen Header einbindet, wird ein Fehler angezeigt oder wenn du etwas in private_header_1.h definierst und es in deinem öffentlichen Header und dann in deiner Quelldatei verwendest (zum Beispiel impl.cpp sagst du:     #include "private_header_1.h"     #include "public_header.h" Auch hier wird der Code korrekt kompiliert, aber das Einfügen von public_header.h in einen anderen Code führt zu einem Fehler

    
BigBoss 26.08.2012 20:39
quelle

Tags und Links