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:
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.
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.
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
Tags und Links compilation c c++ header-files