Ошибка при использовании AsmJit в приложении Qt GUI
ОС: Windows 10
IDE: Visual Studio 2015
Мне нужно использовать библиотеку AsmJit ( https://github.com/asmjit/asmjit) внутри моего приложения Qt GUI. Но это как-то несовместимо. Когда определенные заголовки включены из QT (QWidget и т. Д.), Вещи начинают ломаться.
Большинство ошибок происходят из этой строки:
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);
}
куда ASMJIT_INLINE
определяется как __forceinline
,
Когда я компилирую его в 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
1 ответ
Подумав об этом, я думаю, что единственная причина, по которой asmjit не компилируется с Qt, состоит в том, что qt определяет emit
макрос, который сталкивается с Asmjit emit
функция. Итак, после расширения макроса код:
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); }
становится:
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); }
Использование Qt со сторонними сигналами и слотами ( https://doc.qt.io/qt-5/signalsandslots.html) упоминает это:
no_keywords
говорит Qt не определять ключевые слова moc сигналы, слоты и излучение, потому что эти имена будут использоваться сторонней библиотекой, например, Boost. Затем, чтобы продолжить использовать сигналы и слоты Qt с флагом no_keywords, просто замените все варианты использования ключевых слов Qt moc в ваших источниках соответствующими макросами Qt Q_SIGNALS (или Q_SIGNAL), Q_SLOTS (или Q_SLOT) и Q_EMIT.
Добавление no_keywords
Проект Qt - это то же самое, что и прохождение -DQT_NO_KEYWORDS
компилятору (в основном определяющий QT_NO_KEYWORDS
до 1).
Это можно исправить и на стороне asmjit, однако asmjit не делает ничего плохого. У вас будет такая же проблема со многими другими библиотеками, такими как boost.