Frimen 0 Жалоба Опубликовано August 1, 2011 Всем привет. Столкнулся с такой проблемой Необходимо собрать OpenCV на Android с архитектурой x86. Нашёл неплохую статью по сборке OpenCV под Android. http://recog.ru/blog/opencv/14.html Только там не написано как его собрать под x86. Может быть кто нибудь подскажет как в конфигурационных файлах поменять архитектуру ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 2, 2011 Если у вас нет аппарата с ARMv7, то устанавливаем переменную ARM_TARGET=«armeabi». не? ну может в Cmake еще есть опции. p.s. неплохой блог. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано August 2, 2011 Если у вас нет аппарата с ARMv7, то устанавливаем переменную ARM_TARGET=«armeabi». mrgloom Я полагаю здесь имеется ввиду, что библиотека будет собираться просто под ARM. Мне надо собрать OpenCV под таблетку с архитектурой x86. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано August 2, 2011 ну надо сам android наверно пересобирать под x86 (Android NDK, Android SDK) , хотя это я так говорю навскидку. http://www.android-x86.org/ http://groups.google.com/group/android-porting/browse_thread/thread/66862bdb52dac936?pli=1 http://www.codernotes.com/2011/53/how-to-build-android-x86-from-source/ но мне кажется более простой способ это в CMAKE выбрать другую платформу(Android hardware targets) кроме ARM(если она поддерживается) или как то поправить скрипт руками. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано August 4, 2011 ообщем переписал билдовы скрипт для make под x86. Вроде собралось. Теперь вознкла новая проблема. (Помойму она возникает даже при сборке под arm) После сборки самой библиотеки надо собрать ещё какието вспомогательные библиотеки, которые необходимы для сборки opencv риложений под android. При запуске скрипта выдаёт следующую ошибку: [root@icdkuser android-opencv]# ./cmake_android.sh -- CMAKE_CXX_FLAGS for x86 --sysroot=/home/icdkuser/Documents/Android/development/android-ndk-r6/platforms/android-9/arch-x86 -fPIC -DANDROID -Wno-psabi -fsigned-char -- CMAKE_C_FLAGS for x86 --sysroot=/home/icdkuser/Documents/Android/development/android-ndk-r6/platforms/android-9/arch-x86 -fPIC -DANDROID -Wno-psabi -fsigned-char -- tool ok --sysroot=/home/icdkuser/Documents/Android/development/android-ndk-r6/platforms/android-9/arch-x86 -fPIC -DANDROID -Wno-psabi -fsigned-char CMake Error at jni/CMakeLists.txt:38 (INCLUDE): include called with wrong number of arguments. Include only takes one file. CMake Error at jni/CMakeLists.txt:43 (SET_SWIG_JAVA_PACKAGE): Unknown CMake command "SET_SWIG_JAVA_PACKAGE". -- Configuring incomplete, errors occurred! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 4, 2011 вроде Swig хочет: http://www.swig.org/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано August 4, 2011 SWIG-2.0.4 уже стоит. Может быть какие нибудь дополнительные переменные окружения нужно прописать ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 4, 2011 Найдите в файлах CMake эту строчку (SET_SWIG_JAVA_PACKAGE) и посмотрите что конкретно ему не нравится. Иногда можно просто закомментировать хотя это не правильно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано August 5, 2011 В скрипте используется только в одном месте #convenience macro for swig java packages macro( SET_SWIG_JAVA_PACKAGE package_name ) string( REGEX REPLACE "[.]" "/" package_name_output ${package_name} ) set( CMAKE_SWIG_OUTDIR ${SWIG_OUTPUT_ROOT}/${package_name_output} ) set( CMAKE_SWIG_FLAGS "-package" "\"${package_name}\"" ) endmacro() Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано August 5, 2011 А компилировали как здесь? ЗЫ: в SVN сейчас для андроида много чего меняется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано August 5, 2011 Да компилировал так как написанно в документации, за одним лиш исключением, что в билд скрипте поменял пути на пути к тулчейну под x86. Я немогу найти нигде чё делает функция macro, которая используется в билд скрипте сmake ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Frimen 0 Жалоба Опубликовано August 8, 2011 Вообщем решил проблему с macro( SET_SWIG_JAVA_PACKAGE package_name )- это оказалось определение функции SET_SWIG_JAVA_PACKAGE с параметром package_name. Перенёс код функции в то место где она используется и вроде cmake сгенерировал файлы. Теперь проблема вознкла при вызове самого make. make енерирует объектники, но неможет их слинковать в конкретную библиотеку. Пишет: [root@icdkuser build]# make Linking CXX shared module ../../libs/x86/libandroid-opencv.so CMakeFiles/android-opencv.dir/gl_code.cpp.o: In function `__static_initialization_and_destruction_0(int, int)': gl_code.cpp:(.text+0xec3): undefined reference to `__dso_handle' CMakeFiles/android-opencv.dir/image_pool.cpp.o: In function `__static_initialization_and_destruction_0(int, int)': image_pool.cpp:(.text+0x91b): undefined reference to `__dso_handle' /home/icdkuser/Documents/Android/development/android-ndk-r6/sources/cxx-stl/gnu-libstdc++/libs/x86/libstdc++.a(system_error.o): In function `__static_initialization_and_destruction_0': /tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/src/system_error.cc:65: undefined reference to `__dso_handle' /home/icdkuser/Documents/Android/development/android-ndk-r6/sources/cxx-stl/gnu-libstdc++/libs/x86/libstdc++.a(eh_globals.o): In function `__static_initialization_and_destruction_0': /tmp/ndk-digit/src/build/../gcc/gcc-4.4.3/libstdc++-v3/libsupc++/eh_globals.cc:118: undefined reference to `__dso_handle' collect2: ld returned 1 exit status make[2]: *** [../libs/x86/libandroid-opencv.so] Error 1 make[1]: *** [jni/CMakeFiles/android-opencv.dir/all] Error 2 make: *** [all] Error 2 Из за чего он может не линковаться ? Библиотеки вроде все на месте. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах