error adding symbols: DSO missing from command line
-
Hallo!
Ich erstelle momentan eine Library A, die Funktionen aus einer anderen Library B benutzt. Ein paar dieser Funktionen aus der Library B werden in einer Template Klasse in Library A verwendet, die zum Zeitpunkt des Kompilierens der Library A noch nicht instantiiert wird. Wenn ich diese Template Klasse in einem Programm instantiiere, das nur gegen Library A linkt, bekomme ich
undefined reference to symbol
Fehler für die Funktionen aus Library B, die in der Template Klasse verwendet werden. Alle Funktionen aus Library B, die im Source der Library A verwendet werden, werden jedoch ohne Probleme gefunden. Desweiteren bekomme ich den Fehlererror adding symbols: DSO missing from command line
. Allerdings möchte ich nicht, dass der Benutzer der Library A zusätzlich noch gegen die Library B linken muss. Ohne die Template Klasse hätte das ja auch funktioniert. Kann man da irgendwas machen, zum Beispiel irgendwie einfach alle Symbole aus Library B in Library A einbinden?Vielen Dank im Voraus!
Zur Verdeutlichung hier mal ein sinnloses Beispiel:
// libfoo.hpp #ifndef LIBFOO_HPP #define LIBFOO_HPP #include <SDL.h> template <unsigned int i> void init() { SDL_Init(i); } void win(int w, int h); #endif
// libfoo.cpp #include<libfoo.hpp> void win(int w, int h) { SDL_CreateWindow("", 0, 0, w, h, SDL_WINDOW_SHOWN); }
// app.cpp #include <libfoo.hpp> int main() { init<SDL_INIT_VIDEO>(); win(0, 0); return 0; }
# runme.sh g++ -fPIC -I. -I /usr/include/SDL2 -c libfoo.cpp -o libfoo.o g++ -shared -lSDL2 libfoo.o -o libfoo.so g++ -I. -I /usr/include/SDL2 -c app.cpp -o app.o g++ -L. -lfoo app.o -o app
-
Dieser Beitrag wurde gelöscht!