海思3519 arm-hisiv500-linux-交叉编译x264、ffmpeg1.2.12、opencv2.4.9

  1. 在x264的源码文件夹下                                                                                                                                                                      /configure --prefix=/home/phoenix/document/hisiv3519/x264_hi3519 --enable-shared --enable-static --host=arm-hisiv500-linux --disable-asm

修改config.mak

Sudo gedit config.mak

主要将:

CC=gcc              改为         CC=arm-hisiv500-linux-gcc  
LD=gcc -o            改为        LD=arm-hisiv500-linux-gcc -o
RANLIB=ranlib        改为        RANLIB=arm-hisiv500-linux-ranlib
STRIP=strip           改为        STRIP=arm-hisiv500-linux-strip
make的时候出现错误:
common/rectangle.h: In function ‘x264_macroblock_cache_rect’:
common/rectangle.h:84: error: ‘v4si’ undeclared (first use in this function)
common/rectangle.h:84: error: (Each undeclared identifier is reported only once
common/rectangle.h:84: error: for each function it appears in.)
common/rectangle.h:84: error: expected ‘;’ before ‘v16’
common/rectangle.h:86: error: ‘__m128’ undeclared (first use in this function)
common/rectangle.h:86: error: expected ‘;’ before ‘v16’

make: *** [x264.o] Error 1

在网上各种搜索也没找到所以然,想起来之前用基于hisiv600工具链编译是成功的,就像是不是出在编译链上,然后看到文件里说:使用某一工具链编译后,如果需要更换工具链,请先将原工具链编译文件清除,然后再更换工具链编译。所以将/etc/profile里面关于hisiv600的路径注释掉,再source /etc/profile ,用命令arm+回车发现hisiv600的工具链仍然存在,然后重启虚拟机,只剩hisiv500的工具链,重新编译x264,成功


2.编译ffmpeg

./configure --prefix=/home/phoenix/document/hisiv3519/ffmpeg_hi3519 --enable-static --enable-cross-compile --arch=arm --target-os=linux --cc=arm-hisiv500-linux-gcc --enable-libx264 --enable-gpl --enable-pthreads --disable-stripping --ar=arm-hisiv500-linux-ar --ld=arm-hisiv500-linux-gcc --strip=arm-hisiv500-strip --extra-cflags=-I/home/phoenix/document/hisiv3519/x264_hi3519/include --extra-ldflags=L/home/phoenix/document/ hisiv3519/ x264_hi3519/lib


make

make install

3.编译opencv

如下图,operation stystem和version processor随便写,编译器分别选择gcc和g++,编译器的目录在/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/arm-hisiv500-linux-gcc,targetroot选择arm-linux编译器的头文件目录,我这里是/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include/。点击finish完成。


这个方法不行,直接按下面的步骤来吧

把/home/phoenix/document/hisiv3519/sourcecode/opencv-2.4.9/platforms/linux下面的arm-gnueabi.toolchain.cmake重命名为arm-hisiv500-linux.toolchain.cmake,把它所有东西删掉,并修改内容

set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-hisiv500-linux-gcc )                                                                                                         
set( CMAKE_CXX_COMPILER arm-hisiv500-linux-g++ )

按照官方教程,在opencv-2.4.9下建立一个build目录,cd进入源码目录,执行一下命令:                                                     cmake -DCMAKE_TOOLCHAIN_FILE=/home/phoenix/document/hisiv3519/sourcecode/opencv-2.4.9/platforms/ l i n ux/arm-hisiv500-linux.toolchain.cmake


过程中所出现的错误有:

  1. CMake Error: The source directory "/home/phoenix/document/hisiv3519/sourcecode/opencv-2.4.9/build" does not appear to contain CMakeLists.txt.                                                                                                                        Specify --help for usage, or press the help button on the CMake GUI.                                                                        原因:在build目录下执行的命令 cmake -DCMAKE_TOOLCHAIN_FILE=/home/phoenix/ document/hisiv3519/ sourcecode/opencv-2.4.9/platforms/ linux/arm-hisiv500-linux.toolchain.cmake,应该在opencv源码目录下执行这条指令          
  2. CMake Error at /usr/local/share/cmake-3.2/Modules/CMakeDetermineSystem.cmake:104 (message):              Could not find toolchain file:                                                                                                                ../platforms/linux/arm-hisiv500-linux.toolchain.cmake../  Call Stack (most recent call first):CMakeLists.txt:56 (project)
    CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
    Missing variable is:
    CMAKE_CXX_COMPILER_ENV_VAR
    CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
    Missing variable is:
    CMAKE_CXX_COMPILER
    CMake Error: Could not find cmake module file: /home/phoenix/document/hisiv3519/sourcecode/opencv-2.4.9/CMakeFiles/3.2.2/CMakeCXXCompiler.cmake
    CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
    Missing variable is:
    CMAKE_C_COMPILER_ENV_VAR
    CMake Error: Error required internal CMake variable not set, cmake may be not be built correctly.
    Missing variable is:
    CMAKE_C_COMPILER
    CMake Error: Could not find cmake module file: /home/phoenix/document/hisiv3519/sourcecode/opencv-2.4.9/CMakeFiles/3.2.2/CMakeCCompiler.cmake
    CMake Error at CMakeLists.txt:56 (project):
      No CMAKE_CXX_COMPILER could be found.
      Tell CMake where to find the compiler by setting the CMake cache entry
      CMAKE_CXX_COMPILER to the full path to the compiler, or to the compiler
      name if it is in the PATH.
    CMake Error at CMakeLists.txt:56 (project):
      No CMAKE_C_COMPILER could be found.
      Tell CMake where to find the compiler by setting the CMake cache entry
      CMAKE_C_COMPILER to the full path to the compiler, or to the compiler name
      if it is in the PATH.
    CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
    CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
    -- Configuring incomplete, errors occurred!                                                                                                                    原因: 在源代码下执行的是命令 cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-hisiv500-linux. toolchain.cmake../ 被自己蠢哭了,那个../是要自己对照着路径修改补齐的,我直接粘贴复制的。                                       综上,应该在opencv的源码目录下建一个build目录,并在opencv的源码目录下执行指令  用cmake-gui打开opencv的源码目录下的CMakeCache.txt,参照前面的博客把一些用不到选项的去掉,修改安装目 录/home/phoenix/ docume nt/ hisiv3519/opencv_hi3519。然后 make和 make install。在/home/phoenix/document /hisiv3519/ opencv _hi3 519, 里面有库文件和头文件(后面的事实证明这一波操作还是错的大哭
  3. 编译自己的程序的时候出现错误:/home/phoenix/document/hisiv3519/opencv_hi3519/ lib/ libopencv_imgproc.a :error adding symbols: 不可识别的文件格式 collect2: error: ld returned 1 exit status。                                              原因:说是不可识别的文件格式,那肯定是用错编译器了,打开CMakeCache.txt一看果不其然,后来想通了,我用的opencv的源码目录下的CMakeCache.txt,默认用的是编译器路径是/usr/bin/gcc.                                                           终极正确操作应该是在   opencv的源码目录下新建build文件夹,在build下面执行下面的指令,真是,看了好多遍官网教程,都没注意到要用的两次源码目录         cmake -DCMAKE_TOOLCHAIN_FILE=/home/phoenix/document/hisiv3519/sourcecode/opencv-2.4.9/platforms /linux/arm-hisiv500-linux.toolchain.cmake(空格)/home/phoenix/document /hisiv3519/ sourcecode/opencv -2.4.9                                                                                                                                         然后,执行完这一句之后,在build下面会出现一个CMakeCache.txt,用cmake打开这个CMakeCache.txt,然后参照前面的博客把一些用不到选项的去掉,修改安装目 录/home/phoenix/ docume nt/ hisiv3519/opencv_hi3519。然后 make和 make install。
  • 终于对了,我都把那些选项背会了。 





  • 0
    点赞
  • 5
    评论
  • 5
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
本资源为arm-linux下的海思编译链工具V300 C语言有三种标准库如下: 1.Glibc glibc = GNU C Library 是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。 目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。 其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。 2.uClibc 一个小型的C语言标准库,主要用于嵌入式。 其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。 对应的,此处的u意思是μ,Micro,微小的意思。 uClibc的特点: (1)uClibc比glibc要小很多。 (2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。 3.EGLIBC EGLIBC = Embedded GLIBC EGLIBC是,(后来)glibc的原创作组织FSF所(新)推出的,glibc的一种变体,目的在于将glibc用于嵌入式系统。 EGLIBC的目标是: (1)保持源码和二进制级别的兼容于Glibc 源代码架构和ABI层面兼容 如果真正实现了这个目标,那意味着,你之前用glibc编译的程序,可以直接用eglibc替换,而不需要重新编译。 这样就可以复用之前的很多的程序了。 (2)降低(内存)资源占用/消耗 (3)使更多的模块为可配置的(以实现按需裁剪不需要的模块) (4)提高对于交叉编译(cross-compilation)和交叉测试(cross-testing)的支持 【目前了解到的海思交叉编译工具链的应用环境】 arm-hisiv100-linux为基于uclibc的工具链,arm-hisiv200-linux 为基于 glibc 的工具链; arm-hisiv300-linux为基于uclibc的工具链,arm-hisiv400-linux 为基于 glibc 的工具链; arm-hisiv500-linux为基于uclibc的工具链,arm-hisiv600-linux 为基于 glibc 的工具链。 (在开发的时候,你编译内核所用的交叉编译链跟用户的应用程序所用的交叉编译链一定需要相同,不然没法调用系统内核的依赖库)   其中eglibc这种很容易被人开发者忽视,从而选错了编译工具链。 uClibc和Glibc并不相同,两者有许多不同之处,有可能给你带来一些问题。
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

樊小辫

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者