[gelöst] Linux SO-Module undefined symbol - wie debuggen?
-
Wie gesagt, das pagecontrol funktioniert.
Das nutzt vermutlich auch dieses struct.
Von gtk musste ich bisher immer nur die gtk.h importieren.Gruß Frank
-
Fehler gefunden,
ich habe die ListView.o nicht mit in das Modul gelinkt.Gruß Frank
-
kann man irgendwie auf der Kommandozeile prüfen, ob es unresolved symbols gibt? sonst werden die ja erst angezeigt, wenn das modul geladen wird.
evtl gibt es ja eine Möglichkeit das Modul direkt zu laden...
-
frank schrieb:
kann man irgendwie auf der Kommandozeile prüfen, ob es unresolved symbols gibt? sonst werden die ja erst angezeigt, wenn das modul geladen wird.
evtl gibt es ja eine Möglichkeit das Modul direkt zu laden...
ldd -r libfoo.so oder ldd -r programm
zeigt die nicht auflösbaren Symbole an.Michael
-
mhm, da zeigt er natürlich auch die Symbole an, die in der Lua-Umgebung definiert werden...kann man da bestimmte ignorieren?
-
frank schrieb:
mhm, da zeigt er natürlich auch die Symbole an, die in der Lua-Umgebung definiert werden...kann man da bestimmte ignorieren?
Hast du das ldd gegen die Lib oder gegen ein Binary ausgeführt?
Im ersten Fall kannst du sie ignorieren oder deine Lib mit der liblua linken, damit sie verschwinden. Letzteres ist meine bevorzugte Lösung, weil du dann nicht jedes Programm, das deine Lib nutzt, explizit mit Lua linken musst.Michael
-
meine lib ist nur für ein programm, und das hat lua schon integriert.
wenn dann würde ich höchstens nochmal gegen lua linken um den test mit ldd durchzuführen...welche dateien von lua benötige ich dafür und wie sieht das linken direkt aus?
-
frank schrieb:
meine lib ist nur für ein programm, und das hat lua schon integriert.
wenn dann würde ich höchstens nochmal gegen lua linken um den test mit ldd durchzuführen...welche dateien von lua benötige ich dafür und wie sieht das linken direkt aus?
In dem Fall würde ich die fehlenden Lua-Symbole in meiner Lib ignorieren

Welche der lua-Libs du brauchst wenn du linken willst, hängt von den Symbolen ab, die fehlen. Auf alle Fälle die liblua.so würde ich meinen.
Gelinkt wird dann wie dein Programm auch (-llua). Hängt v.a. von deinem Build-System ab, wie's genau ausschaut.
Nutzt du händisch verfasste Makefiles, automake und co, cmake oder ganz was anderes?Michael
-
ich entwickel nur die lib, das programm ist von jemand anderes

mein Makefile für die lib:
http://c-plusplus.net/forum/viewtopic-var-t-is-274563-and-highlight-is-.htmlwürde aber das linken außerhalb des makefiles verlagern, da ich das linken nur zum testen auf die unresolved symbols benötige und für die "Auslieferung" nicht benötigt wird. evtl. auch zusätzliches target im makefile
die liblia.so muss ich bei mir mal suchen, denke nicht, dass die bei gcc dabei ist, oder? notfalls muss ich mir mal die kompletten lua-sources ziehen oder mal bei dem Programm schauen, ob die da irgendwo rumliegt
-
ich habs jetzt so hinbekommen:
#if lua not found this is needed: # sudo ln -s /usr/lib/liblua5.1.so.0 /usr/lib/liblua5.1.so debug.so: $(OBJS) $(LD) $(INC) -llua5.1 $(LD-FLAGS) $@ $(OBJS)>/dev/null ldd -r $@ >/dev/null $(RM) $@ >/dev/nullund das makefile so aufrufen:
make -s debug.sodanke an alle
Gruß Frank