Tak jak mówi tytuł, chcę utworzyć bibliotekę współdzieloną z trzech plików cpp iz pewną biblioteką statyczną.Utwórz bibliotekę współdzieloną z plików cpp i biblioteki statycznej za pomocą g ++
Basicly chcę zrobić to
g++ libProject.so file1.cpp file2.cpp file3.cpp -I /usr/local/include -L /usr/local/lib -lAlgatorc
To mój file1.cpp:
#include <iostream>
#include <TestSetIterator.hpp>
class SortingTestSetIterator : public TestSetIterator {
public:
TestCase *get_current(){
//TODO: implement method
return nullptr;
}
};
To mój 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 "";
}
};
A to moja plik3. 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
}
};
myślę, że trzeba utworzyć trzy .o plików (file1.o file2.o file3.o), a następnie połączyć je jak ten
ld -r file1.o file2.o file3.o -o file.o
Kiedy mam file.o Przypuszczam, że wtedy muszę powiedzieć:
g++ -shared -o libProject.so file.o
, ale nie wiem jak skompilować pliki .cpp do plików .o. wiem, że mogę to zrobić jak ten
g++ -std=gnu++11 -o file1.o -fPIC -c file1.cpp -I /usr/local/include
ale muszę również bibliotekę statyczną do tego polecenia, ponieważ file1.cpp (i inne pliki) dziedziczy klasę, która jest zdefiniowana w/usr/local/include/TestSetIterator .hpp, ale jest zaimplementowana w /usr/local/lib/libAlgatorc.a Z powodu -c nie mogę powiedzieć -L/usr/local/lib -lAlgatorc
Na koniec chcę udostępnić bibliotekę tych trzech klasy tak, że w głównej funkcji mogę załadować tę bibliotekę do mojego programu i mogę wywołać metody z tych trzech klas. Tak więc chcę udostępnić bibliotekę ze wszystkimi symbolami z biblioteki statycznej (libAlgatorc.a) i ze wszystkich trzech plików cpp (file1.cpp, file2.cpp i file3.cpp)
Używam 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.
Czy to nie jest dup pytanie, które już wskazałem? http://stackoverflow.com/questions/2649735/how-to-link-static-library-into-dynamic-library-in-gcc –
Nie. Nie ma wspólnej biblioteki zbudowanej z biblioteki statycznej i plików cpp. Istnieje wspólna biblioteka zbudowana tylko z biblioteki statycznej. Chcę to połączyć. – golobich
Nadal jest w zasadzie taki sam. Po prostu dodaj do tego polecenia pliki '.o' w tej odpowiedzi. Chodzi o to, że druga odpowiedź pokazuje, jak zapewnić, by wszystkie symbole z biblioteki statycznej trafiły do wspólnej biblioteki, co jest dokładnie twoim problemem. –