لدي مشكلة في استخدام xxh3.h
على Widows أثناء البناء لبنية ARM.
المشكلة هي أن __emulu
هو ماكرو داخلي x64 / x86 فقط في windows ( MS Docs ).
/* U64 XXH_mult32to64(U32 a, U64 b) { return (U64)a * (U64)b; } */
#ifdef _MSC_VER
# include <intrin.h>
/* MSVC doesn't do a good job with the mull detection. */
# define XXH_mult32to64 __emulu
#else
# define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF))
#endif
حيث يتم تعريفه يتحقق فقط من _MSC_VER
قبل استخدامه. سيكون من المفيد جدًا أن يتحقق هذا من الهندسة أيضًا. قل إما من خلال عدم تضمينه عند ARM أو استخدامه فقط على معالجات x64 / x86. شكرا.
نقطة جيدة ، شكرًا للإعلامcarstenskyboxlabs !
من المحتمل أن نفرض أن مسار الكود هذا صالح فقط لـ x86
/ x64
، حيث أن هذا هو الهدف حيث يتم تعريف تعليمة __emulu
.
ملاحظة جانبية: سيكون من الرائع أن أجد طريقة لاختبار تجميع Visual Studio لـ ARM ، وأتمتة مثل هذا الاختبار في AppveyorCI . كان من الممكن أن يلقي القبض على هذه المشكلة ، والمشكلات المستقبلية المحتملة.
شكرا للإستجابة.
لست متأكدًا من أنني لم أستخدم AppveyorCI مطلقًا ، لكنني أعلم أن VS / MSBuild يدعم إنشاءات UWP ARM.
عندما أقوم بتشغيل هذه الخطوات باستخدام CMake و Visual Studio 2019:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
لقد تلقيت هذا الخطأ:
xxhash.obj : error LNK2019: unresolved external symbol __emulu referenced in function XXH3_mul128_fold64 [C:\Users\steve\Do
cuments\xxHash\cmake_unofficial\build\xxhash.vcxproj]
C:\Users\steve\Documents\xxHash\cmake_unofficial\build\Debug\xxhash.dll : fatal error LNK1120: 1 unresolved externals [C:\U
sers\steve\Documents\xxHash\cmake_unofficial\build\xxhash.vcxproj]
ليس لدي خبرة كبيرة مع appveyor.yml ، ولكن باتباع النمط الحالي ، أعتقد أن هذا سيسمح لك بإنشاء وتشغيل ARM:
- if "%PLATFORM%"=="visual_arm" (
cd cmake_unofficial &&
cmake . -DCMAKE_BUILD_TYPE=Release -A ARM &&
cmake --build . --config Release
)
شكرًا @ v-strob على التلميح! يستحق المحاولة !
ربما ينبغي أن يعمل هذا. يجب أن يصلح تجميع ARM ، ويجب أن يحسن أداء x64
#if defined(_MSC_VER) && defined(_M_IX86)
# include <intrin.h>
# define XXH_mult32to64 __emulu
#else
# define XXH_mult32to64(x, y) ((U64)((x) & 0xFFFFFFFF) * (U64)((y) & 0xFFFFFFFF))
#endif
ثابت في فرع dev
التعليق الأكثر فائدة
عندما أقوم بتشغيل هذه الخطوات باستخدام CMake و Visual Studio 2019:
cd cmake_unofficial
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A ARM ..
cmake --build .
لقد تلقيت هذا الخطأ:
ليس لدي خبرة كبيرة مع appveyor.yml ، ولكن باتباع النمط الحالي ، أعتقد أن هذا سيسمح لك بإنشاء وتشغيل ARM: