opencv - 使用 cmake for raspberry pi 交叉编译 opencv 代码失败
问题描述
我正在尝试从 ubuntu18.04 x86 机器为覆盆子编译示例代码。我的 cmake 和 toolchain.cmake 文件丢失了一些东西,我无法制作,尽管 cmake 工作得很好。请帮忙。
我已经在我的电脑上测试了用于构建的 cmake 和输出 makefile。我工作正常,但在交叉编译期间失败。我试图编译的代码可以在这里找到:https ://github.com/adamb/opencv-samples/blob/master/hello-world.cpp
#CMakeLists.txt
cmake_minimum_required (VERSION 3.0)
#name of projekt
project (blink_example)
find_package (OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
include_directories( ${CMAKE_FIND_ROOT_PATH}/usr/include/arm-linux-gnueabihf )
add_executable( DisplayImage helloWorld.cpp)
target_link_libraries(DisplayImage ${OpenCV_LIBS})
工具链RPi.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(FLAGS "-isystem $ENV{HOME}/mntsysroot/usr/include/arm-linux-gnueabihf")
UNSET(CMAKE_C_FLAGS CACHE)
UNSET(CMAKE_CXX_FLAGS CACHE)
SET(CMAKE_CXX_FLAGS ${FLAGS} CACHE STRING "" FORCE)
SET(CMAKE_C_FLAGS ${FLAGS} CACHE STRING "" FORCE)
# Specify the cross compiler
SET(CMAKE_C_COMPILER $ENV{HOME}/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++)
# Where is the target environment
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/mntsysroot)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
# Search for programs only in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search for libraries and headers only in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
INCLUDE_DIRECTORIES(${CMAKE_FIND_ROOT_PATH}/opt/vc/include)
INCLUDE_DIRECTORIES(${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads)
INCLUDE_DIRECTORIES(${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux)
错误日志:
shekhar@shekhar-virtual-machine:~/Downloads/opencvCmake$ make
[ 50%] Linking CXX executable DisplayImage
/home/shekhar/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libz.so.1, needed by /home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopencv_highgui.so.2.4.9, not found (try using -rpath or -rpath-link)
/home/shekhar/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libglib-2.0.so.0, needed by /home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopencv_highgui.so.2.4.9, not found (try using -rpath or -rpath-link)
/home/shekhar/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: liblzma.so.5, needed by /home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libtiff.so.5, not found (try using -rpath or -rpath-link)
/home/shekhar/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libselinux.so.1, needed by /home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0, not found (try using -rpath or -rpath-link)
/home/shekhar/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libmount.so.1, needed by /home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0, not found (try using -rpath or -rpath-link)
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_set_error'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_sequence_swap'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_queue_peek_head'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_hash_table_lookup_extended'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_hash_table_new_full'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_cond_clear'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_is_container'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libssh-gcrypt.so.4: undefined reference to `gcry_randomize@GCRYPT_1.6'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `mnt_free_iter@MOUNT_2.19'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_get_uint16'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_propagate_error'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_key_file_get_locale_string_list'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_get_monotonic_time'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_malloc_n'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_is_of_type'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libfontconfig.so.1: undefined reference to `XML_ParserCreate'
/libopencv_ts.so.2.4.9: undefined reference to `vtable for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_quark_from_static_string'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_checksum_get_string'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_key_file_unref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_unichar_toupper'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_mkstemp'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_main_loop_is_running'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_n_children'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_bookmark_file_get_description'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_pattern_spec_free'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_ptr_array_remove_index'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_string_new_len'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_array_append_vals'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libtiff.so.5: undefined reference to `deflateInit_'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopencv_ts.so.2.4.9: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_erase(unsigned int, unsigned int)@GLIBCXX_3.4.21'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgdk_pixbuf-2.0.so.0: undefined reference to `g_bytes_new_take'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_match_info_unref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_error_matches'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_markup_parse_context_parse'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_time_zone_unref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_ptr_array_remove_index_fast'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_strcmp0'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libp11-kit.so.0: undefined reference to `getauxval@GLIBC_2.16'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_print_string'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_hash_table_ref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_hash_table_remove_all'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_option_group_ref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_convert'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_new_from_data'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_list_copy_deep'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_error_copy'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopenmpt.so.0: undefined reference to `std::range_error::range_error(char const*)@GLIBCXX_3.4.21'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_strjoinv'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_timeout_add_seconds'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_assertion_message_error'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_checksum_copy'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_file_get_contents'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_bookmark_file_to_file'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_main_loop_run'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_path_skip_root'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgdk-x11-2.0.so.0: undefined reference to `g_source_add_poll'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_slist_delete_link'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_static_private_set'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libssh-gcrypt.so.4: undefined reference to `gcry_mpi_set_ui@GCRYPT_1.6'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `mnt_new_context@MOUNT_2.19'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_list_remove'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_spawn_command_line_async'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libfontconfig.so.1: undefined reference to `XML_SetCharacterDataHandler'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_sequence_insert_before'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_ascii_strdown'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopencv_core.so.2.4.9: undefined reference to `gzclose'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_get_string'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libxml2.so.2: undefined reference to `gzdopen'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_get_data_as_bytes'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libx265.so.95: undefined reference to `__log2_finite@GLIBC_2.15'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopencv_highgui.so.2.4.9: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct(unsigned int, char)@GLIBCXX_3.4.21'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_file_open_tmp'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_pattern_spec_new'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libssh-gcrypt.so.4: undefined reference to `gcry_mpi_test_bit@GCRYPT_1.6'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_node_destroy'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_dataset_id_set_data_full'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_key_file_get_value'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_builder_close'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_date_time_ref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0: undefined reference to `g_variant_dict_ref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libavcodec.so.57: undefined reference to `mmal_port_parameter_set_uint32'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_date_set_time_t'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_mkstemp_full'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_static_private_get'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libxml2.so.2: undefined reference to `gzwrite'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_sequence_foreach'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_key_file_ref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_array_get_element_size'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_strreverse'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libopencv_ts.so.2.4.9: undefined reference to `std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const@GLIBCXX_3.4.21'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libharfbuzz.so.0: undefined reference to `g_unichar_decompose'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_utf8_get_char_validated'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_completion_complete_utf8'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_get_system_data_dirs'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_main_context_unref'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_slist_insert'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgtk-x11-2.0.so.0: undefined reference to `g_source_set_callback'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libssh-gcrypt.so.4: undefined reference to `gcry_mpi_print@GCRYPT_1.6'
/home/shekhar/mntsysroot/usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0: undefined reference to `g_variant_is_floating'
collect2: error: ld returned 1 exit status
CMakeFiles/DisplayImage.dir/build.make:112: recipe for target 'DisplayImage' failed
make[2]: *** [DisplayImage] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/DisplayImage.dir/all' failed
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
我对所有这些交叉编译都很陌生。系统 rpi 和 x64 pc 都使用以下命令安装了 opencv:
sudo apt-get install libopencv-dev
上面的日志不是完整的日志,而是重复的,
解决方案
推荐阅读
- c# - 在异步无效中取消任务
- java - 如何在 Swift 中将二维数组的大小传递给数组
- file - 根据计数将文件分成相等的部分
- javascript - React/JS 数组表现不同
- vue.js - 是否可以将“v-for”中的迭代元素用作数据属性中的对象键?
- twilio - 如何在 twilio-freeswitch 中启用 G722
- facebook - 无效的密钥哈希。输入的密钥哈希与任何存储的密钥哈希都不匹配
- linux - 如何在shell脚本/bash中将.txt文件输出转换为表格格式[不是html表格格式]
- asp.net - 如何通过 Web.Config 在 cookie 中添加 SameSite:none
- jquery - 剑道ui网格弹出隐藏按钮