2016-03-30 1 views
1

Ich schrieb ein einfaches C++ Programm mit ntl Bibliotheken. Ich versuche, eine statische Bibliothek aus meinem Programm zu erstellen. Früher habe ich diese Befehle:Wie erstellen statische Bibliotheken mit Systembibliotheken?

g++ -Wall -g -c base.cpp -o base.o 
ar rcs libMyStaticLib.a *.o 

libMyStaticLib.a wurde erfolgreich erstellt. Aber wenn ich libMyStaticLib.a in einem anderen Projekt verwendet erhalte ich diese Fehlermeldung:

g++ -o main.out main.cpp -lMyStaticLib 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libMyStaticLib.a(base.o): In function `NTL::Vec<NTL::GF2>::~Vec()': 
/usr/local/include/NTL/vec_GF2.h:43: undefined reference to `NTL::WordVector::~WordVector()' 

meinen main.cpp

#include <iostream> 
#include </home/Qwer/test/base.h> 

int main() 
{ 
    baseInit(); 
    return 0; 
} 

Ich versuche ntl Bibliothek zu verknüpfen, während statische Bibliothek zu schaffen

ar rcs libMyStaticLib.a *.o -lntl 

Aber ich Erhalten Sie diesen Fehler:

ar: two different operation options specified 

Ich möchte statische Bibliothek versuchen und sie in einem anderen Projekt verwenden. Wie soll ich das so?

Antwort

1

Statische Bibliotheken sind nichts mehr, dass Archive (das ist, was das ar Programm erstellt, und das .a Suffix steht für) von Objektdateien. Die Verknüpfung mit einer statischen Bibliothek ist wie eine Verknüpfung mit den Objektdateien innerhalb des Archivs.

$ g++ -o main.out main.cpp -lMyStaticLib -lntl 
+1

Danke:

Deshalb werden alle anderen Bibliotheken, die Ihre statische Bibliothek auf hängt auch müssen verknüpft werden. Aber ich sollte den Code kompilieren, ohne ntl Bibliothek (envireonment hat es nicht). Gibt es eine Möglichkeit, ntl mit myStaticLib (oder etwas anderem) zu integrieren? – user4757345

+0

@ user4757345 Meinst du, du baust deine Bibliothek auf einem System, das ntl installiert hat, und willst deine Bibliothek auf einem System verwenden, auf dem ntl nicht installiert ist? Die meisten Projekte listen nur ihre Abhängigkeiten auf und bitten ihre Benutzer, die Abhängigkeiten zu installieren (in Ihrem Fall ntl). Abgesehen davon ist die einzige Lösung, wenn ntl über eine statische Bibliothek verfügt, in der Sie die Objektdateien aus ihrer Bibliothek extrahieren und zu Ihrer hinzufügen können. Mit dieser Lösung könnten jedoch Lizenzprobleme verbunden sein. –

+0

ja. Ich möchte eine statische Bibliothek mit allen Abhängigkeiten erstellen und andere Programmierer sollten nur meine Bibliothek nicht ntl oder andere Systembibliotheken verwenden. Ist das möglich ? – user4757345