首页 > 解决方案 > 使用 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

上面的日志不是完整的日志,而是重复的,

标签: opencvcmakeraspberry-picross-compiling

解决方案


推荐阅读