【发布时间】:2017-12-10 04:02:23
【问题描述】:
过去几周我一直在学习 C++ 和 x64 汇编,并希望开始使用 Qt IDE 进行 GUI 编程。问题是我找不到链接和编译包含汇编代码的文件的方法。我一直在浏览互联网和这个网站,但没有发现任何有用的信息。
这是我迄今为止尝试过的: .pro
QMAKE_CXXFLAGS += -save-temps
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = test---
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
QMAKE_EXTRA_COMPILERS += nasm
SOURCES += main.cpp\
mainwindow.cpp\
asm.s
HEADERS += mainwindow.h
FORMS += mainwindow.ui
主窗口.cpp
//code
extern "C" __int64 assembly();
//code
void MainWindow::on_pushButton_clicked()
{
int zahl = assembly(); // place what the assembly function return into "zahl"
}
asm.s
.code
.global
assembly proc
mov rax, 1
ret
xor rax, rax
assembly endp
end
尝试编译项目会导致以下错误消息:
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)
我还找到了控制台应用程序的设置指南。但它似乎不适合 GUI 应用程序:http://dvisagie.blogspot.de/2011/09/setting-up-qt-creator-for-assemblylinux.html
以下是我在 Visual Studio 中编译程序集文件的方式: .cpp:
#include "stdafx.h"
#include<iostream>
using namespace std;
extern "C" __int64 _stdcall assembly();
int main()
{
cout << assembly() << endl;
system("pause");
return 0;
}
.asm: 。代码 组装过程
mov rax, 1234
ret
xor rax, rax
assembly endp
end
【问题讨论】:
-
没有成功。您可能知道如何为我的项目正确格式化这些定义吗?编辑:QMAKE_FILE_IN — 这是输入文件名,带路径这是否意味着我必须用文件名 + 路径替换 QMAKE_FILE_IN?
-
以github.com/Skycoder42/QtRestClient/blob/master/mkspecs/features/… 为例。
REST_API_CLASSES将是项目文件的变量。如果您仍然有问题,我可以使用代码为您的问题创建一个完整的答案,但不会在明天之前...... -
@Felix 仍然无法正常工作。这是该项目的下载链接:mega.nz/#!31dDGTLJ!V-D2EytdyON1-56d4J7FOOCt_DJLawj4xDttxl6N1QE 感谢您提供帮助
-
在 Windows 上,您需要使用前导下划线来装饰外部符号,因此在您的程序集文件中使用
_assembly而不是assembly。这就解释了 Windows 上的链接错误。
标签: c++ qt assembly nasm qmake