构建 sqlite3mc 合并失败并显示“_mm_aesimc_si128”:目标特定选项不匹配 - 即使使用 -march=native
Building sqlite3mc amalgamation fails with ‘_mm_aesimc_si128’: target specific option mismatch - Even with -march=native
我正在尝试构建这个项目:https://github.com/utelle/SQLite3MultipleCiphers
具体来说,合并文件位于:https://github.com/utelle/SQLite3MultipleCiphers/releases/tag/v1.2.5
我从 _mm_aesimc_si128
函数中得到这个错误:
/usr/lib/gcc/x86_64-linux-gnu/9/include/wmmintrin.
h:77: error: inlining failed in call to always_inline ‘_mm_aesimc_si128’: target specific option mismatch
In file included from ../sqlite3mc/sqlite3mc_amalgamation.c:250494:
../sqlite3mc/sqlite3mc_amalgamation.c: In function ‘aesGenKeyDecrypt’:
/usr/lib/gcc/x86_64-linux-gnu/9/include/wmmintrin.h:77:1: error: inlining failed in call to always_inline ‘_mm_aesimc_si128’: target specific option mismatch
77 | _mm_aesimc_si128 (__m128i __X)
| ^~~~~~~~~~~~~~~~
../sqlite3mc/sqlite3mc_amalgamation.c:250589:26: note: called from here
我从其他问题中了解到,我的 CPU 需要支持这些内部函数,并且我需要传入编译器标志以启用它们。我 认为 为此我需要 AES 和 SSE4.2,因为 Github 代码中的 Makefile.am 对于 x86 具有 -msse4.2 -maes
。
我正在使用 QtCreator 和 qmake,因为我正试图将其集成到现有的 Qt 项目中,但我现在只是想让它与新项目一起工作。
这是我的 .pro 文件,我正在传递 -march=native
标志(我也尝试了 -msse4.2 -maes
,结果相同):
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle qt debug_and_release
SOURCES += \
main.cpp \
sqlite3mc_amalgamation.c
HEADERS += \
sqlite3.h \
sqlite3ext.h \
sqlite3mc_amalgamation.h
QMAKE_CXXFLAGS += -march=native
检查我的体系结构的启用标志,并搜索 aes 和 sse 给我:
g++ -Q --help=target -march=native | egrep "(msse)|(maes)"
-maes [enabled]
-msse [enabled]
-msse2 [enabled]
-msse2avx [disabled]
-msse3 [enabled]
-msse4 [enabled]
-msse4.1 [enabled]
-msse4.2 [enabled]
-msse4a [disabled]
-msse5
-msseregparm [disabled]
正在检查我的 CPU 的可用扩展名并搜索 sse 和 aes:
lscpu | egrep "(sse)|(aes)"
Flags: sse sse2 ssse3 sse4_1 sse4_2 aes <many other flags>
所以 -march=native
启用了 SSE4.2 和 AES,我的 CPU 也支持 SSE4.2 和 AES,但我仍然遇到错误。
我该怎么做才能克服这个错误(并希望构建整个东西)?
由于合并文件是 C 文件,因此它应该是:
QMAKE_CFLAGS += -march=native
没有
QMAKE_CXXFLAGS += -march=native
此外,sqlite3mc 使用 pthread 和 ldl,因此必须链接这些库:
LIBS += -pthread -ldl
进行这些更改后,构建成功。
我正在尝试构建这个项目:https://github.com/utelle/SQLite3MultipleCiphers
具体来说,合并文件位于:https://github.com/utelle/SQLite3MultipleCiphers/releases/tag/v1.2.5
我从 _mm_aesimc_si128
函数中得到这个错误:
/usr/lib/gcc/x86_64-linux-gnu/9/include/wmmintrin.
h:77: error: inlining failed in call to always_inline ‘_mm_aesimc_si128’: target specific option mismatch
In file included from ../sqlite3mc/sqlite3mc_amalgamation.c:250494:
../sqlite3mc/sqlite3mc_amalgamation.c: In function ‘aesGenKeyDecrypt’:
/usr/lib/gcc/x86_64-linux-gnu/9/include/wmmintrin.h:77:1: error: inlining failed in call to always_inline ‘_mm_aesimc_si128’: target specific option mismatch
77 | _mm_aesimc_si128 (__m128i __X)
| ^~~~~~~~~~~~~~~~
../sqlite3mc/sqlite3mc_amalgamation.c:250589:26: note: called from here
我从其他问题中了解到,我的 CPU 需要支持这些内部函数,并且我需要传入编译器标志以启用它们。我 认为 为此我需要 AES 和 SSE4.2,因为 Github 代码中的 Makefile.am 对于 x86 具有 -msse4.2 -maes
。
我正在使用 QtCreator 和 qmake,因为我正试图将其集成到现有的 Qt 项目中,但我现在只是想让它与新项目一起工作。
这是我的 .pro 文件,我正在传递 -march=native
标志(我也尝试了 -msse4.2 -maes
,结果相同):
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle qt debug_and_release
SOURCES += \
main.cpp \
sqlite3mc_amalgamation.c
HEADERS += \
sqlite3.h \
sqlite3ext.h \
sqlite3mc_amalgamation.h
QMAKE_CXXFLAGS += -march=native
检查我的体系结构的启用标志,并搜索 aes 和 sse 给我:
g++ -Q --help=target -march=native | egrep "(msse)|(maes)"
-maes [enabled]
-msse [enabled]
-msse2 [enabled]
-msse2avx [disabled]
-msse3 [enabled]
-msse4 [enabled]
-msse4.1 [enabled]
-msse4.2 [enabled]
-msse4a [disabled]
-msse5
-msseregparm [disabled]
正在检查我的 CPU 的可用扩展名并搜索 sse 和 aes:
lscpu | egrep "(sse)|(aes)"
Flags: sse sse2 ssse3 sse4_1 sse4_2 aes <many other flags>
所以 -march=native
启用了 SSE4.2 和 AES,我的 CPU 也支持 SSE4.2 和 AES,但我仍然遇到错误。
我该怎么做才能克服这个错误(并希望构建整个东西)?
由于合并文件是 C 文件,因此它应该是:
QMAKE_CFLAGS += -march=native
没有
QMAKE_CXXFLAGS += -march=native
此外,sqlite3mc 使用 pthread 和 ldl,因此必须链接这些库:
LIBS += -pthread -ldl
进行这些更改后,构建成功。