Hallo zusammen,
ich habe ein Problem beim Kompilieren (bzw eher Linken) einer SharedLibrary unter Linux (g++) mit einer Scons-Buildumgebung. Und zwar werden scheinbar nur die Header-Files in die SharedLibrary integriert, die Source-Files (*.cpp) werden ignoriert. Ich bekomme beim Aufruf später "undefined reference" Fehlermeldungen für alle Methoden/Klassen die zwar in der .h definiert, aber erst in der .cpp implementiert werden. Wenn ich alles in den Header packe, funktioniert es wunderbar.
Ich habe eine minimale Test-Library erstellt, die das Problem verdeutlicht:
TestLib.h
#ifndef _TestLib_H_
#define _TestLib_H_
int FooMethod();
int FooMethod_h()
{
return 0;
}
#endif
TestLib.cpp
#include "TestLib.h"
int FooMethod()
{
return 5;
}
SConscript
import os, time
import os.path
import sys
import string
Import( "rootEnv", "ConfigError" )
env = rootEnv.Clone();
headers = [
"TestLib.h"
];
sources = [
"TestLib.cpp"
];
Default(env.Install(Dir(env['localInc']).Dir('TestLib'), headers))
lib = env.SharedLibrary('TestLib', source = sources)
Default(env.Install(Dir(env['localLib']), lib))
Die Lib wird korrekt erstellt und kann auch eingebunden werden. Die FooMethod_h kann später aufgerufen werden, bei der FooMethod bekomme ich dagegen eine "undefined reference" Meldung.
Erkennt hier jemand einen Fehler meinerseits? Ich muss dazu sagen, dass ich mein SConscript in eine größere SConstruct Umgebung integriert habe, die ich nicht selbst erstellt habe. Könnte auch in der SConstruct etwas für den Fehler verantwortlich sein?
Viele Grüße,
Rodney
theliquidwave schrieb:
Angenommen, ich erstelle eine Headerdatei mit Funktionsprototypen, Membern, und so weiter.
Müsst ihr dann auch die cpp-Datei erst erstellen, die Klasse manuell einfügen, die Initialisierungsliste schreiben, ect. pp.?
das kostet sowenig Zeit, dass es sich nicht lohnt darueber nachzudenken wie man das schneller machen kann.
Die IDE muss mir bei den grossen Zeitfressern helfen. Ein bisschen Tiparbeit ersparen ist nett, aber ob ich da jetzt 20 Sekunden schneller bin oder nicht, ist eigentlich irrelevant.
Kóyaánasqatsi schrieb:
Michael E. schrieb:
Hast du etwa sechs Stunden lang weder gespeichert, noch kompiliert?
Jop.
Dann hast du jetzt wenigstens die Grundlagen vom Arbeiten am Computer gelernt:
Save early, save often.
Sorry, aber da ist es schwer mitgefuehl zu zeigen... Jede Software kann irgendwann abstuerzen. Deshalb gibt es automatische Speicherung und man selber sollte auch immer regelmaessig speichern. Was wenn es einen Stromausfall oder so gibt?
Mir gefällt der ddd, weil ich einmal ein Programm schreiben musste, dass Signale berechnet (FFT, ...).
Da kann man vom ddd aus direkt GnuPlot aufrufen. Der visualisiert quasi ein Array graphisch (Bsp).
Klar hab ich in VS auch schon debuggt (mach das auch beruflich), aber ich vermisse unter Linux eigentlich nicht wirklich was aus VS.
Nachdem ich VS jetzt erstmal geschlossen hatte, habe ich es eben geöffnet und siehe da:
Es hat sich wieder korrekt verhalten.
Komisch...naja, ist ja jetzt gelöst
Vielen Dank! Jetz habe ich es auch gefunden:
Rechtsklick auf den Code im Editor -> Gliedern -> Nur Definitionen anzeigen.
Es gibt auch andere Menüpunkte dort, sicher auch interessant.
Hm... wäre eigentlich logisch, wenn das auch auf Windows funktionieren würde.
Ich weiß nur, dass der GCC beim Kompilieren mit LTO libelf verlangt (die es natürlich nur für *n*x gibt) und sonst nicht. Ich weiß nicht genau, ob es da irgendwelche Patches gibt.
Auweia, GCC kompilieren! Wobei die binutils noch das geringste Übel sind. Die habe ich schon auf Windows (nicht die mingw-binutils, sondern die normalen) mit MSYS und MinGW kompiliert. Wenn man sich ein bisschen mit configure und make auskennt, geht das. (Man muss nur wissen, welche Ordnerstruktur man anlegt und aus welchem Ordner man configure und make aufruft)
Hi,
Ich habe folgende Probleme:
1. Es gibt kein build-button (Hammer-Button) in der Entwicklungsumgebung
2. Eclipse hat keinen eigenen Editor, sondern es wird der Editor von Qt aufgerufen
3. Kompilierung funktioniert nicht, wenn ich auf "Build" gehe.
Ich hoffe ihr könnt mir helfen.
lg
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
man muss einfach nur in /usr/share/autoconf/autoconf/c.m4 dort nacht "-O2" suchen, und durch die gewünschten Optemierungen ersetzen. Man sollte aber noch zuvor ein Backup erstellen. Dannach mit "./autogen.sh" die neuen "./configure" erzeugen und freu ^^
P.S. bei MinGW/MSYS-User ist es zu finden unter MSYS\1.0\share\autoconf\autoconf\c.m4
Hallo,
wenn ich im Visual Studio 2005 eine Applikation unter Win 7 debugge dann wird mir der Inhalt einer CString Variable angezeigt -> so möchte ich es auch sehen.
Wenn ich die Platform auf Windows CE 6.0 umstelle dann sehe ich nicht den Inhalt sondern das Objekt der Klasse CString. Ich kann diese Aufklappen um den Inhalt wieder zusehen.
Weiss jemand von euch was ich machen msuss damit das Verhalten gleich dem Windows 7 ist denn das aufklappen der Objekte ist auf die Dauer nervig.
Über Einstellungen nichts, aber du kannst was machen.. indem du ein paar MFC-Sourcefiles editierst. Das würde ich aber nicht direkt empfehlen.
Hier der Link zum How-To: http://tedwvc.wordpress.com/2010/05/27/how-to-make-small-statically-linked-mfc-exes-in-visual-c-2010/