[英]Error when using AsmJit within a Qt GUI Application
OS: Windows 10操作系统:Windows 10
IDE: Visual Studio 2015 IDE:Visual Studio 2015
I need to use the AsmJit library ( https://github.com/asmjit/asmjit ) inside my Qt GUI Application.我需要在 Qt GUI 应用程序中使用 AsmJit 库 ( https://github.com/asmjit/asmjit )。 But is is somehow incompatible.但在某种程度上是不兼容的。 When certain headers are included from QT (QWidget etc.), things start to break.当某些头文件包含在 QT(QWidget 等)中时,事情开始出现问题。
Most errors originate from this line:大多数错误源自这一行:
ASMJIT_INLINE Error emit(uint32_t code, const Operand& o0, const Operand& o1, const Operand& o2, const Operand& o3) {
return _emit(code, o0, o1, o2, o3);
}
Where ASMJIT_INLINE
is defined as __forceinline
.其中ASMJIT_INLINE
定义为__forceinline
。
When I compile it in VS2015, it is giving the following error:当我在 VS2015 中编译它时,它给出了以下错误:
Severity Code Description Project File Line Suppression State
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2334 unexpected token(s) preceding '{'; skipping apparent function body Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 466
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C2238 unexpected token(s) preceding ';' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C2062 type 'int' unexpected Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 477
Error C2146 syntax error: missing '>' before identifier 'uint64_t' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 248
Error C2146 syntax error: missing '>' before identifier 'uint32_t' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 242
Error C2146 syntax error: missing '>' before identifier 'uint32_t' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 260
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 466
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C2143 syntax error: missing ';' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C2143 syntax error: missing ',' before '&' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 494
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 464
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 466
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 477
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 479
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C2146 syntax error: missing ')' before identifier 'code' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C2061 syntax error: identifier 'uint64_t' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 284
Error C2061 syntax error: identifier 'uint32_t' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 278
Error C2061 syntax error: identifier 'uint32_t' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 296
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 464
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 466
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 479
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C2059 syntax error: ')' Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 494
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 242
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 248
Error C4430 missing type specifier - int assumed. Note: C++ does not support default-int Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 260
Error C3646 'o0': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 479
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 464
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 466
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 477
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 479
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C3646 'code': unknown override specifier Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 466
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 477
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 479
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C2086 'asmjit::Error asmjit::Assembler::uint32_t': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 468
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 470
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 481
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 483
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 485
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 487
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 489
Error C2086 'asmjit::Error asmjit::Assembler::Operand': redefinition Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 491
Error C2327 'asmjit::Assembler::uint32_t': is not a type name, static, or enumerator Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 494
Error C2327 'asmjit::Assembler::uint32_t': is not a type name, static, or enumerator Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 513
Error C2433 'asmjit::Assembler::uint32_t': '__forceinline' not permitted on data declarations Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
Error C2433 'asmjit::Assembler::Operand': '__forceinline' not permitted on data declarations Loader C:\Users\Ik\Documents\Visual Studio 2015\Projects\DC\loader\CustomBone\contrib\AsmJit\base\assembler.h 472
After thinking about this I think the only reason that asmjit doesn't compile with Qt is that qt defines emit
macro, which collides with asmjit's emit
function.考虑到这一点后,我认为 asmjit 不使用 Qt 编译的唯一原因是 qt 定义了emit
宏,该宏与 asmjit 的emit
函数发生了冲突。 So after expanding the macro the code:因此,在扩展宏代码后:
ASMJIT_INLINE Error emit(uint32_t code,
const Operand& o0,
const Operand& o1,
const Operand& o2,
const Operand& o3) { return _emit(code, o0, o1, o2, o3); }
Becomes:变成:
ASMJIT_INLINE Error (uint32_t code,
const Operand& o0,
const Operand& o1,
const Operand& o2,
const Operand& o3) { return _emit(code, o0, o1, o2, o3); }
Using Qt with 3rd Party Signals and Slots ( https://doc.qt.io/qt-5/signalsandslots.html ) mentions it:使用 Qt 与 3rd Party Signals and Slots ( https://doc.qt.io/qt-5/signalsandslots.html ) 提到它:
no_keywords
tells Qt not to define the moc keywords signals, slots, and emit, because these names will be used by a 3rd party library, eg Boost.no_keywords
告诉 Qt 不要定义 moc 关键字信号、插槽和发射,因为这些名称将被 3rd 方库使用,例如 Boost。 Then to continue using Qt signals and slots with the no_keywords flag, simply replace all uses of the Qt moc keywords in your sources with the corresponding Qt macros Q_SIGNALS (or Q_SIGNAL), Q_SLOTS (or Q_SLOT), and Q_EMIT.然后要继续使用带有 no_keywords 标志的 Qt 信号和槽,只需将源中 Qt moc 关键字的所有使用替换为相应的 Qt 宏 Q_SIGNALS(或 Q_SIGNAL)、Q_SLOTS(或 Q_SLOT)和 Q_EMIT。
Adding no_keywords
to Qt project is the same as passing -DQT_NO_KEYWORDS
to the compiler (basically defining QT_NO_KEYWORDS
to 1).将no_keywords
添加到 Qt 项目与将-DQT_NO_KEYWORDS
传递给编译器相同(基本上将QT_NO_KEYWORDS
定义为 1)。
This could be fixed on asmjit side as well, however, asmjit is doing nothing wrong.这也可以在 asmjit 端修复,但是,asmjit 没有做错任何事。 You would have the same problem with many other libraries like boost.对于许多其他库,如 boost,您会遇到同样的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.