2017-12-13 2 views
0

Ich brauche einen Build-Befehl ähnlich auszuführen:Wie kann ich eine Markierung in einer Bibliothek in SCons anwenden?

g++ -Wl,-rpath=../libs source.o -static -Wl,-Bdynamic -ldynlib -Wl,-Bstatic -lstaticlib 

Meine aktuellen (falsch) SConscript Links in dynlib mit dieser Zeile:

env.AppendUnique(LINKFLAGS=['-Wl,-Bdynamic', '-ldynlib']); 

Allerdings, wenn ich scons laufen, ich diese:

g++ -Wl,-rpath=../libs -static -Wl,-Bdynamic -ldynlib source.o -Wl,-Bstatic -lstaticlib 

Da source.o nach dynlib ist, kann es dynlib nicht finden, und dies verursacht Verbindungsfehler. Die Lösung (manuell überprüft) ist das Verschieben von source.o vor dynlib, einer vom Hersteller bereitgestellten Bibliothek.

Idealerweise würde ich Dynib zu LIBS hinzufügen, aber SCons scheint dort keine Flags zu unterstützen.

Mit welcher Problemumgehung kann ich SCons dazu bringen, die korrekte Build-Zeile zu generieren?

+1

Bitte zeigen Sie Ihr komplettes SConscript, so dass wir sehen können, woher die Flags '' -Wl, -Bstatic -lstaticlib' stammen. Wäre es nicht möglich, "-ldynlib'" an der Stelle anzugeben, an der das '' -lstatic' 'angegeben ist? Das sollte Ihr Problem gut lösen ... Wenn das aus irgendeinem Grund nicht funktioniert, zeigen Sie bitte auch, wie Sie * SCons * aufrufen und die vollständige Ausgabe im Verbatim-Format posten. – dirkbaechle

+0

Sie heben einen guten Punkt, der mich zur Antwort führte. Vielen Dank. – amo

Antwort

0

Literal erwies sich als die Lösung. Aus welchen Gründen auch immer, SCons stellt meinen Flaggen jetzt kein '-l' vor.

env['FORCEDYNAMIC'] = env.Literal('-Wl,-Bdynamic') 
    env.PrependUnique(LIBS = [['${FORCEDYNAMIC}', 'dynlib']]) 
Verwandte Themen