2016-10-02 3 views
0

Ich schreibe Assemblersprache, Programm wie folgt aus:Wie spezifiziert man Befehlszeilenargumente und Licer der Linux-Assembly, die in SCONs verwendet werden?

.data 
.equ b,3 
.text 
.globl _start 
_start: 
movl $2,%ebx 
movl $b,%ecx 
movl $1,%eax 
int $0x80 

ich es unter Ubuntu 64bit-Version kompilieren. Ich möchte eine 32-Bit-Version, so unter der Shell kann ich tun:

$ as my.s -32 
$ ld a.out -o my 

OK, kein Problem. Ich wünsche scons verwenden, um diesen Prozess zu verwalten, so habe ich SConstruct:

Program('my.s') 

Dies kompiliert erste ‚als my.s -o my.o‘ verwenden und ‚gcc my.o -o mein‘, und Bericht und Fehler der Neudefinition von "_start".

Mein Problem ist:

Wie kann ich '-32' Option übergeben, um sicherzustellen, dass ich 32-Bit-Version Objektdatei kompilieren aus?

Wie kann ich den Linker 'ld', aber nicht 'gcc' angeben, um sicherzustellen, dass ich '_start' als Einstiegspunkt in meine Assembly-Quelldatei verwenden kann?

Antwort

1

Zum Übergeben von Flags an den Assembler sollte ASFLAGS funktionieren.

Für Fahnen Linker vorbei, sollte LINKFLAGS

arbeiten

Für Einstellung, die für Linker LINK (oder SHLINK) ausführbare Datei zu verwenden, sollte es tun.

Alle diese sind in der Manpage aufgeführt: http://scons.org/doc/production/HTML/scons-man.html

wahrscheinlich folgende sollte für Sie arbeiten:

env=Environment(tools=['as','gnulink']) 
env['ASFLAGS'] = '-32' 
env['LINK'] = 'ld' 
env.Program('my',['my.s']) 
Verwandte Themen