Genau wie der Titel sagt, ich möchte gemeinsame Bibliothek aus drei cpp-Dateien und mit einigen statischen Bibliothek erstellen.Erstelle gemeinsam genutzte Bibliothek aus cpp-Dateien und statische Bibliothek mit g ++
Basicly Ich möchte diese
g++ libProject.so file1.cpp file2.cpp file3.cpp -I /usr/local/include -L /usr/local/lib -lAlgatorc
Das ist mein file1.cpp tun:
#include <iostream>
#include <TestSetIterator.hpp>
class SortingTestSetIterator : public TestSetIterator {
public:
TestCase *get_current(){
//TODO: implement method
return nullptr;
}
};
Das ist mein file2.cpp
#include<iostream>
#include<TestCase.hpp>
#include<Entity.hpp>
#include<ParameterSet.hpp>
class SortingTestCase : public TestCase {
public:
std::string print() {
//TODO: implement method
return "";
}
};
Und das ist mein file3. cpp
#include <iostream>
#include <AbsAlgorithm.hpp>
#include "SortingTestCase.cpp"
class SortingAbsAlgorithm : public AbsAlgorithm {
private:
SortingTestCase Sorting_test_case;
public:
bool init (TestCase &test) {
//TODO: implement method
return true;
}
void run() {
//TODO: Implement method
}
void done() {
//TODO: Implement method
}
};
Ich denke, dass ich drei .o Dateien erstellen müssen (file1.o file2.o file3.o) und dann wie diese
ld -r file1.o file2.o file3.o -o file.o
kombinieren Wenn ich file.o nehme ich an, dass dann ich brauche Um das zu sagen:
aber ich weiß nicht, wie .cpp-Dateien in O-Dateien kompilieren. Ich weiß, dass ich es wie diese
g++ -std=gnu++11 -o file1.o -fPIC -c file1.cpp -I /usr/local/include
tun können, aber ich muß auch statische Bibliothek zu diesem Befehl liefern, weil file1.cpp (und andere Dateien) erben Klasse, die in/usr/local/include/TestSetIterator definiert ist .hpp aber ist in /usr/local/lib/libAlgatorc.a implementiert. Wegen -c kann ich nicht sagen -L/usr/local/lib -lAlgatorc
Am Ende möchte ich eine gemeinsame Bibliothek dieser drei Klassen, so dass ich in der Hauptfunktion diese Bibliothek in mein Programm laden kann und Methoden aus diesen drei Klassen aufrufen kann. Also, ich möchte shared library mit allen Symbolen aus der statischen Bibliothek (libAlgatorc.a) und aus allen drei cpp-Dateien (file1.cpp, file2.cpp und file3.cpp)
Ich benutze Ubuntu 12.04 x64.
> g++ --version
g++ (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Ist das nicht eine Frage, auf die ich bereits hingewiesen habe? http://stackoverflow.com/questions/2649735/how-to-link-static-library-into-dynamic-library-in-gcc –
Nein. Es gibt keine gemeinsam genutzte Bibliothek aus statischen Bibliotheken und CPP-Dateien. Es gibt eine gemeinsam genutzte Bibliothek, die nur aus einer statischen Bibliothek erstellt wird. Ich möchte das beides kombiniert. – golobich
Es ist immer noch im Grunde das Gleiche. Fügen Sie einfach die '.o' Dateien zum Befehl in dieser Antwort hinzu. Der Punkt ist, dass die andere Antwort zeigt, wie sichergestellt werden kann, dass alle Symbole aus einer statischen Bibliothek in einer gemeinsam genutzten Bibliothek landen, was genau Ihr Problem ist. –