scons und SharedLibrary: Source-Files werden ignoriert
-
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