CosmoCortney
Komplett-PC-Aufrüster(in)
Hallo,
seit nun einem halben Jahr verzweifle ich an dem Versuch, eine Assemblerdatei in meinem Qt GUI Projekt einzubinden und zu kompilieren.
Nach vielem versuchen, recherchieren und fragen habe ich einige nützliche Informationen erhalten. Bekomme mein Programm aber dennoch nicht kompiliert
Dass das ganze funktionieren kann weiß ich, da Qt nasm unterstützt.....
Hier ist die .pro-Datei:
Und der entscheidene Ausschnit der .cpp-Datei:
Assemler-Datei:
Das ist die Fehlermeldung:
mainwindow.obj:-1: Fehler: LNK2019: unresolved external symbol assembly referenced in function "private: void __cdecl MainWindow::on_pushButton_clicked(void)" (?on_pushButton_clicked@MainWindow@@AEAAXXZ)
Kennst sich jemand von Euch mit Qt gut genug aus, um mir zu helfen oder kennt jemand, der eine Lösung parat hat?
Hier und im Anhang das Projekt: Anhang anzeigen test---.zip
seit nun einem halben Jahr verzweifle ich an dem Versuch, eine Assemblerdatei in meinem Qt GUI Projekt einzubinden und zu kompilieren.
Nach vielem versuchen, recherchieren und fragen habe ich einige nützliche Informationen erhalten. Bekomme mein Programm aber dennoch nicht kompiliert
Dass das ganze funktionieren kann weiß ich, da Qt nasm unterstützt.....
Hier ist die .pro-Datei:
Code:
QMAKE_CXXFLAGS += -save-temps
QMAKE_EXTRA_COMPILERS += nasm
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test---
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += main.cpp\
mainwindow.cpp\
asm.s
HEADERS += mainwindow.h
FORMS += mainwindow.ui
asm.name = nasm ${QMAKE_FILE_IN}
nasm.input = ASM_FILES #input variable. Muss ich ASM_FILES vielleicht mit asm.s ersetzen?
nasm.variable_out = LST_FILES
nasm.commands = nasm -f elf -g -F stabs ${QMAKE_FILE_IN} -l ${QMAKE_FILE_OUT}
nasm.output = $$OUT_PWD/${QMAKE_FILE_BASE}.lst
nasm.CONFIG += target_predeps
nasm_ld.name = nasm_ld ${QMAKE_FILE_IN}
nasm_ld.input = LST_FILES
nasm_ld.variable_out = OBJECTS
nasm_ld.commands = ld -o ${QMAKE_FILE_BASE} ${QMAKE_FILE_OUT}
nasm_ld.output = $$OUT_PWD/${QMAKE_FILE_BASE}.o
nasm_ld.CONFIG += target_predeps
QMAKE_EXTRA_COMPILERS += nasm nasm_ld
ASM_FILES += asm.s
Und der entscheidene Ausschnit der .cpp-Datei:
Code:
// code
extern "C" __int64 assembly(); // include assembly function
//code
void MainWindow::on_pushButton_clicked()
{
__int64 num = assembly(); // Den Wert aus rax in num schieben
}
Assemler-Datei:
Code:
.code
.global
assembly proc
mov rax, 1 ;1 in rax
ret ;return rax
xor rax, rax ;rax = 0
assembly endp
end
Das ist die Fehlermeldung:
mainwindow.obj:-1: Fehler: LNK2019: unresolved external symbol assembly referenced in function "private: void __cdecl MainWindow::on_pushButton_clicked(void)" (?on_pushButton_clicked@MainWindow@@AEAAXXZ)
Kennst sich jemand von Euch mit Qt gut genug aus, um mir zu helfen oder kennt jemand, der eine Lösung parat hat?
Hier und im Anhang das Projekt: Anhang anzeigen test---.zip