Ich folge diesem Beispiel. Ich möchte jedoch eine statische Binärdatei für den angegebenen Spielzeug-Beispielcode zusammenstellen. Normalerweise verwende ich -static
während der Kompilierung, aber hier gibt es eine Fehlermeldung.
Der Kompilierbefehl, der funktioniert:
%Vor%Der Kompilierbefehl, der nicht funktioniert:
%Vor%Die letzten Zeilen der Fehlermeldung:
%Vor%Also wie könnte das getan / behoben werden?
BEARBEITEN: Ich konnte nicht sehen, wie der angehängte Link mein Problem löst. Anscheinend sieht es so aus, dass es auf Grund der Fehlermeldungen ein Problem bei der Art gibt, wie ich es statisch kompilieren möchte . Ich konnte den richtigen Weg nicht finden. Ich denke, die Fehlermeldung ist Missleading - Es endet nur mit diesen Zeilen (wo diese Zeilen weniger als ein Prozent der gesamten Nachricht sind). Wer es getan hat, kann besser antworten. Wenn Sie denken, dass Ihre Antwort mehr ist als nur eine begründete Vermutung, würde ich Sie bitten, es zu versuchen, bevor Sie antworten. Es dauert nur ein paar Minuten, wenn Sie dem beigefügten Link folgen. Außerdem habe ich C
getaggt, auch weil es für C-Programme genauso ist.
Nachstehend sind die Schritte beschrieben, um die C / C ++ - Anwendung statisch mit der FreeImage-Bibliothek unter Ubuntu zu kompilieren:
README.linux
file und lesen Sie es. Es hat sehr nützliche Informationen. Ich würde empfehlen, es nicht zu verpassen. README.linux
-Datei führt auch zum Kompilieren (sowohl statisch als auch dynamisch) und installiert diese Bibliothek für C oder C ++. Im Folgenden geht es um C ++: FreeImagePlus ist ein C ++ - Wrapper für FreeImage. Um FreeImage als C ++ - Bibliothek zu erstellen, geben Sie das FreeImage-Verzeichnis mit der Eingabeaufforderung ein und erstellen Sie die Verteilung mit dem folgenden Befehl:
%Vor% Sobald make
abgeschlossen ist, sind die gewünschten Dateien im Verzeichnis Dist
verfügbar.
- libfreeimageplus.a : Dies ist die statische Bibliothek, die verwendet werden kann.
- FreeImagePlus.h : Dies ist die für Include verfügbare Header-Datei.
Kopieren Sie einfach diese zwei Dateien in das Verzeichnis, in dem die Beispiel-C ++ - Datei (sagen wir "freeimagetest.cpp") bereits platziert ist.
Verwenden Sie den folgenden Befehl, um die C / C ++ - Anwendung statisch mit der FreeImage-Bibliothek unter Ubuntu zu kompilieren:
%Vor%Wenn Sie mehr über das Erstellen und Verwenden von statischen Bibliotheken erfahren möchten, können Sie hier ein Beispiel verfolgen hier
Diese Schritte haben mein Problem gelöst.
Bitte zögern Sie nicht, diese Antwort zu verbessern.
Wenn Sie eine Bibliothek statisch verknüpfen (anstatt sie dynamisch zu verknüpfen), müssen Sie normalerweise alle Abhängigkeiten manuell verknüpfen. Sie müssen herausfinden, welche Bibliothek (Abhängigkeit) fehlt und verknüpfen Sie es auch.
Quick googling zeigt, dass inflateReset
aus einer Bibliothek namens zlib
stammt. Daher müssen Sie es mit -lz
verknüpfen. Es gibt eine gute Chance, dass Sie diese Bibliothek bereits in Ihren Compiler-Suchverzeichnissen haben, aber wenn Sie dies nicht tun, müssen Sie sie manuell kompilieren.
Benutzte Visual C ++ 6 Quelle: Verwenden Sie FreeImage als statische Bibliothek
Wie verwende ich FreeImage als statische Bibliothek statt als DLL (Visual C ++ 6)?
%Vor%mit MakeFile.MingW
%Vor%Sie brauchen keine weitere Bibliothek, lesen Sie ReadMe.Mingw Section 2
Sie müssen keine andere Third-Party-Bibliothek (wie libjpeg, libpng, libtiff, libmng und zlib und andere) installiert Ihr System, um die Bibliothek zu kompilieren und zu verwenden. FreeImage verwendet seine eigenen Versionen dieser Bibliotheken. Auf diese Weise können Sie sicher sein, dass FreeImage verwendet immer die neuesten und ordnungsgemäß getesteten Versionen von diesen Bibliotheken Dritter.
Der Link, den Sie in Ihrer eigenen Antwort zu dieser Frage gepostet haben, ist oben:
Die Quelldistribution enthält Quellen für FreeImage-, C ++ -, C # -, Delphi- und VB6-Wrapper, Beispiele und die intern verwendeten Bibliotheken LibTIFF , LibJPEG, LibPNG, ZLib , OpenEXR, OpenJPEG, LibRaw, LibJXR und LibWebP.
Die von Ihnen verwendete Distribution führt wahrscheinlich nicht alle diese Bibliotheken in die statische Version der freeimage-Bibliothek.
Die Kompilierungsfehler legen nahe, dass Sie versuchen sollten, ZLib und LibTIFF des Systems der Liste der Bibliotheken hinzuzufügen, mit denen Sie verknüpfen. Auf diese Weise können Sie vermeiden, Ihre eigene Version der freeimage-Bibliothek zu erstellen und die Systemversion zu verwenden. Wenn ZLib und LibTIFF nicht zu den fehlenden gehören, können Sie versuchen, die Systemversionen der anderen Bibliotheken in der Liste einzeln hinzuzufügen, um zu sehen, welche Version das fehlende Linkproblem löst.
Es hat eine Abhängigkeit von einer Zip-Bibliothek. Wahrscheinlich zlib.
Diese Funktionen haben keine Abhängigkeiten und sind ein besserer Weg, um Abhängigkeiten zu vermeiden.
Tags und Links c c++ static-linking freeimage static-libraries