Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » cpp-Datei vom kompilieren von ShardObject vergessen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.04.2007, 21:04 Uhr
FunnyDingo



Hallo zusammen,

ich habe ich ein SharedObject kompiliert und via dlopen() einbinden wollen. Leider habe ich ich eine CPP-Datei vergessen. Beim kompilieren wurde kein Fehler gemeldet, erst als das Hauptprogramm da so einbinden wollte. Die Ausgabe von dlerror() war:
Zitat:
npm/http.so: undefined symbol: _Z10strReplaceRSsRKSsS1_
Ich habe dann durch Zufall den Fehler gefunden und habe die fehlende CPP-Datei beim kompilieren noch dran gehangen und alles ging ;-)

Meine Frage: gibt es irgendwie eine Möglichkeit rauszubekommen was hinter Symbol "_Z10strReplaceRSsRKSsS1_" steckt? Warum hat der Kompilier da nicht schon gemeckert? Vielleicht ein Fehler im Makefile? Für das so sehen die Anweisungen so aus (Ausschnitt):
Code:
LIBS = -L /usr/local/lib -lgcc -ldl -lpthread
CC = g++
CCFLAGS = -g -ggdb -Wall -pg
mein.so:
    $(CC) $(CCFLAGS) --shared -o ./npm/mein.so ./npm/file1.cpp ./npm/file2.cpp ./npm/file3.cpp $(LIBS)


Wäre über Anregungungen sehr erfreut!

Gruß,
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 19.04.2007 um 21:05 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.04.2007, 22:27 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


mach noch zu den CCFLAGS ein --no-undefined hinzu, dann sollte er bei fehlender Datei meckern.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.04.2007, 22:32 Uhr
FunnyDingo



Kling eigentlich ganz gut, aber das mag er wohl nicht:
Zitat:
cc1plus: error: unrecognized command line option "-fno-undefined"
(wieso macht er denn draus ein -fno-undefined?).

PS: Aktuell habe ich das Problem erneut, aber dieses mal habe ich keine Ahung welche CPP fehlen sollte :-(
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 19.04.2007 um 22:34 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.04.2007, 22:42 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Laut Fehlermeldung könnte man meinen, du hasst ihm ein "-fno-undefined" anstelle eines "--no-undefined" gegeben? (ohne mich damit auszukennen)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.04.2007, 22:43 Uhr
FunnyDingo



Falls die gcc version entscheidend ist, hier mal die Ausgabe von g++ -v:
Zitat:
Using built-in specs.
Target: i586-suse-linux
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.1.0 --enable-ssp --disable-libssp --enable-java-awt=gtk --enable-gtk-cairo --disable-libjava-multilib --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --without-system-libunwind --with-cpu=generic --host=i586-suse-linux
Thread model: posix
gcc version 4.1.0 (SUSE Linux)

--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.04.2007, 22:45 Uhr
FunnyDingo



@Reyx: Leider nicht ;-)

Zitat:
g++ -g -ggdb -Wall -pg --no-undefined --shared -o ./npm/http.so ./npm/http/npm.cpp ./npm/http/socket.cpp ./npm/http/protocol.cpp ./jobengine/jobclass.cpp ./jobengine/jobengineclass.cpp ./utils/string.cpp -L /usr/local/lib -lgcc -ldl -lpthread
cc1plus: error: unrecognized command line option "-fno-undefined"
cc1plus: error: unrecognized command line option "-fno-undefined"
cc1plus: error: unrecognized command line option "-fno-undefined"
cc1plus: error: unrecognized command line option "-fno-undefined"
cc1plus: error: unrecognized command line option "-fno-undefined"
cc1plus: error: unrecognized command line option "-fno-undefined"
make: *** [http.so] Error 1

Wie zu sehen ist, steht bei den Kompileroptionen "--no-undefined", ich weiß nicht, warum er da -fno-undefined raus macht
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.04.2007, 08:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


äh sry, muss natürlich in die LDFLAGS das -no-undefined (nur ein - vorne dran)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.04.2007, 11:16 Uhr
FunnyDingo



Erm, ich habe keine LDFLAGS? Also ich habe mir das Makefile selbst geschrieben und vielleicht auch nicht ganz korrekt!? Hier mal mein komplettes Makefile:
Code:
LIBS = -L /usr/local/lib -lgcc -ldl -lpthread
CC = g++
CCFLAGS = -g -ggdb -Wall -pg

%.o:    %.cpp
    $(CC) $(CCFLAGS) -c $*.cpp -o $*.o

%.so:    %.cpp
    $(CC) $(CCFLAGS) --shared -o $*.so $*.cpp

all: yac npms

clean:
    find . -name \*.so | xargs rm -f
    find . -name \*.o | xargs rm -f
    find . -name \*.cpp | xargs touch
    find . -name \*.h | xargs touch
    find . -name Makefile | xargs touch
    rm -f yac

yac: ./yac.o ./dso/npm.o ./base/dispatcher.o ./base/logger.o ./utils/string.o ./jobengine/jobclass.o ./jobengine/jobengineclass.o
    $(CC) $(CCFLAGS) -o yac $+ $(LIBS)

npms: http.so

http.so:
    $(CC) $(CCFLAGS) --shared -o ./npm/http.so ./npm/http/npm.cpp ./npm/http/socket.cpp ./npm/http/protocol.cpp ./jobengine/jobclass.cpp ./jobengine/jobengineclass.cpp ./utils/string.cpp $(LIBS)


Ich muss gestehen, dass ich vom schreiben eines Makefiles nicht viel Ahnung habe. Ich habe mir das überwiegen aus anderen Makefiles wie z.B. von PHP und Apache "zusammen geklimpert".
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 20.04.2007 um 11:17 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.04.2007, 12:05 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann hauste halt oben nach CCFLAGS ein LDFLAGS= -no-undefined rein:

bzw so:


C++:
%.so:    %.cpp
    $(CC) $(CCFLAGS) -no-undefined --shared -o $*.so $*.cpp



Ansonsten würde ich dir empfehlen doch mal automake anzusehen, ist echt praktisch und einfach zu benutzen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.04.2007, 12:58 Uhr
FunnyDingo



Das -no-undefined so wie du beschrieben hast rein zu setzten habe ich auch schon probiert. Dabei kommt dann folgendes raus:
Code:
g++: unrecognized option '-no-undefined'

Vielleicht unterstüzt mein gcc das nicht?

automake werd ich mir auf jedenfall mal anschauen, danke für den Tipp
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 20.04.2007 um 13:05 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: