#c #clang #webassembly #emscripten
Вопрос:
С Emscripten 2.0.8 я мог бы создать wasm с помощью следующей команды
emcc Test.cc -O3 -std=c 14 -I "F:OpenCV4.5.2include" "F:OpenCV4.5.2liblibopencv_core.a" "F:OpenCV4.5.2liblibopencv_calib3d.a" "F:OpenCV4.5.2liblibopencv_features2d.a" "F:OpenCV4.5.2liblibopencv_flann.a" "F:OpenCV4.5.2liblibopencv_imgproc.a" "F:OpenCV4.5.2liblibopencv_video.a" -s LLD_REPORT_UNDEFINED -s USE_ZLIB=1 -s ALLOW_MEMORY_GROWTH=1 -pthread --no-entry --bind -o Test.html
Но теперь, после обновления Emscripten до версии 2.0.24, если я попытаюсь создать точно такой же файл с точно такими же статическими библиотеками с помощью точно такой же команды, я получу следующую ошибку
wasm-ld: error: F:OpenCV4.5.2liblibopencv_core.a(check.cpp.o): undefined symbol: std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >::basic_string(std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> > constamp;) wasm-ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
Может ли кто-нибудь, пожалуйста, помочь мне изменить мою команду для сборки с помощью Emscripten 2.0.24?
Комментарии:
1. Вы также перестроили зависимости?
2. Честно говоря, нет, я использую зависимости, построенные с версией 2.0.4 в Ubuntu. Позвольте мне построить их еще раз и попробовать. Спасибо, что указали на это.
3. @MarcGlisse Спасибо, что это решило мою проблему. Пожалуйста, добавьте это в ответ, чтобы я мог отметить ответ.
Ответ №1:
В сообщении об ошибке упоминается символ, отсутствующий в libopencv_core.a
. Первое, что нужно попробовать, — это перекомпилировать все (включая все зависимости) с помощью одного и того же компилятора, на случай, если новый не будет обратно совместим со старым.