Wie man eine C / C ++ Anwendung statisch mit der FreeImage Bibliothek in Linux (Ubuntu) kompiliert?

8

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.

    
tod 15.12.2016, 11:50
quelle

5 Antworten

5

Nachstehend sind die Schritte beschrieben, um die C / C ++ - Anwendung statisch mit der FreeImage-Bibliothek unter Ubuntu zu kompilieren:

  1. Verwenden Sie den Link , um die Quelldistribution von FreeImage herunterzuladen.
  2. Downloaden und dekomprimieren, um das FreeImage Quellverzeichnis zu erhalten.
  3. In diesem Verzeichnis öffnen Sie README.linux file und lesen Sie es. Es hat sehr nützliche Informationen. Ich würde empfehlen, es nicht zu verpassen.
  4. 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 ++:

Build FreeImagePlus

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%

Kompilieren Sie die Testanwendung statisch

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.

    
tod 19.12.2016, 11:45
quelle
7

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.

    
HolyBlackCat 15.12.2016 13:07
quelle
3

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

2. Erstellen der FreeImage-Bibliothek mit MinGW

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.

  1. Fehler beim statischen Verknüpfen von FreeImage 3.15. 4 auf MingW (Gelöst)
  2. Ссылка
Angelica 18.12.2016 14:59
quelle
1

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.

    
grovkin 25.12.2016 00:10
quelle
-1

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.

Ссылка

    
Malcolm McLean 15.12.2016 12:06
quelle