Ich habe eine Assembly-Datei, die zwei Funktionen exportiert. Die Funktionsnamen lauten NASM_RDRAND_GenerateBlock
und NASM_RDSEED_GenerateBlock
. Die Symbole haben keine führende Unterstreichung. Die Datei wird mit NASM zusammengestellt.Wie erstellt man Mach-O-Symbol Aliase in NASM?
Im C/C++ - Code werden die Symbolnamen als extern "C"
deklariert, um ein Mangeln zu vermeiden. Die Verknüpfung unter Linux und Cygwin funktioniert wie erwartet. Die Verknüpfung unter OS X nicht mit:
...
Undefined symbols for architecture x86_64:
"_NASM_RDRAND_GenerateBlock", referenced from:
RDRAND::GenerateBlock(unsigned char*, unsigned long) in libcryptopp.a(rdrand.o)
"_NASM_RDSEED_GenerateBlock", referenced from:
RDSEED::GenerateBlock(unsigned char*, unsigned long) in libcryptopp.a(rdrand.o)
ld: symbol(s) not found for architecture x86_64
Ich möchte einen Aliasnamen erstellen, so dass _NASM_RDRAND_GenerateBlock = NASM_RDRAND_GenerateBlock
so Apples Linker mit dem Symbol verknüpfen. Microsoft's PE format and MASM allow it, aber ich bin mir nicht sicher, ob Apple und Mach-O ähnliche Einrichtungen haben.
Meine erste Frage ist, unterstützt das Mach-O-Dateiformat Symbol Aliase?
Wenn ja, dann ist meine zweite Frage, wie sage ich NASM, um den Alias zu erstellen? Oder was muss ich in NASM tun, um einen Symbolalias zu erstellen?
sind hier der Befehl verwendet, um die Objektdateien zu erstellen:
nasm -f macho32 rdrand.S -DX86 -g -o rdrand-x86.o
nasm -f macho64 rdrand.S -DX64 -g -o rdrand-x64.o
Hier ist die assembler file.
Fügen Sie Ihre nasm Befehlszeile Sie verwenden die Baugruppendatei die kompilieren Frage. Außerdem kompilierst du die C/C++ Datei auch auf OSX neu? Wahrscheinlich müssen Sie die Befehlsoptionen '--prefix _' auf NASM verwenden. –