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


Log in to reply