精华内容
下载资源
问答
  • 今天在学树梅派交叉编译时候,因为要用到树梅派的是从别的地方下载的,没有放在lib里面,所以 在编译时候需要制定路径,才能编译。 觉得有必要记录下。 1.首先我是从客户端获取树梅派里将 它的 libwiringPi.so....

    今天在学树梅派交叉编译时候,因为要用到树梅派的库是从别的地方下载的,没有放在lib里面,所以 在编译时候需要制定路径,才能编译。
    觉得有必要记录下。
    在这里插入图片描述

    1.首先我是从客户端获取树梅派里将 它的库 libwiringPi.so.2.50 发送到了我们的linux 客户端。
    使用的指令是 scp pi@192.168.x.x:/库路径 /home/zhang/

    1. 创建软连接 libwiringPi.so

    3.将头文件库 WiringPi拷贝到当前文件夹

    编译

    arm-linux-gnueabihf-gcc wiring.c -I ./WiringPi/wiringPi/   -L. -lwiringPi -o sgy
    
    在编译时候要指定头文件 和库路径
    

    在这里插入图片描述

    下面是参考一个博主的 关于GCC -I -L 的说明 ,他写的确实不错

    [添加链接描述]

    (https://www.cnblogs.com/alan666/p/8311984.html)

    展开全文
  • I . NDK platforms 目录下的 函数 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和文件 IV . 指定编译的头文件 V . 指定编译的文件 VI . 指定编译的头文件与文件 示例



    I . NDK platforms 目录下的 函数库



    platforms 目录下的函数库:


    1 . Android 版本目录 : platforms 中存储了各个 Android 版本编译时需要的动态库与静态库资源 , 如 android-29 中就是该版本对应的本地库资源 ;

    在这里插入图片描述


    2 . CPU 架构目录 :

    在版本目录下存储的是不同的 CPU 处理器对应的库版本 , 如 arm , x86 处理器 , 32 位 与 64 位 等不同版本对应的本地库 ;

    CPU 不同 , 其对应的指令集不同 , 相应编译出的动态库或静态库就不同 ;

    在这里插入图片描述

    3 . 函数库目录 :


    在对应 CPU 目录下的 usr\lib 目录下 , 存储了该 Android 版本对应的 CPU 版本的动态库 与 静态库 ;

    开发高性能音频时使用的 libOpenSLES.so , 打印日志使用的 liblog.so 库 , 就是在该目录下 ; 引入的 #include <android/log.h> 头文件对应的方法逻辑实现就在 liblog.so 库中 ;

    在这里插入图片描述



    II . Ubuntu 配置 NDK 交叉编译环境



    独立使用 NDK 提供的交叉编译工具 , 需要在 Ubuntu Linux 下执行 , 因此这里我们下载 Linux 版本的 NDK ;


    1 . NDK 下载地址 : https://developer.android.google.cn/ndk/downloads

    历史版本的 NDK 下载地址 : https://developer.android.google.cn/ndk/downloads/older_releases.html


    2 . 下载完毕会后在 Ubuntu 中解压文件 :
    在这里插入图片描述


    3 . 配置临时环境变量 :


    ① 目的 : 该临时环境变量 就是 NDK 中的交叉编译工具的路径 , 目的是方便调用 ;


    ② 执行指令 : export CC=/home/book/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc


    ③ CC 环境变量作用 : CC 是变量名 , 调用的时候使用 $CC main.c 即可调用上述路径中的 arm-linux-androideabi-gcc 工具编译 main.c 源文件 ;


    ④ 交叉编译 : 上述路径的编译器就是在 Linux 中编译 ARM CPU 指令集的函数库 , 由于是在 X86 芯片上编译 ARM 芯片的函数库 , 因此该操作叫做交叉编译 ;


    4 . 尝试交叉编译 :

    ① main.c 源文件 :

    #include <stdio.h>
    
    int main(){
    	printf("main : test");
    	return 0;
    }
    

    ② 尝试编译 : 调用 $CC main.c 命令尝试编译 main.c 程序 , 发现如下问题 ;

    book@book-virtual-machine:~/NDK$ $CC main.c 
    main.c:1:19: fatal error: stdio.h: No such file or directory
     #include <stdio.h>
                       ^
    compilation terminated.
    book@book-virtual-machine:~/NDK$ 
    
    

    ③ 分析原因 : 此处需要提供 stdio.h 对应的头文件与函数库 , 上面连头文件都没有找到 , 需要我们来指定 ;


    下面开始说明如何指定头文件与库文件 ;



    III . 同时指定编译的头文件和库文件



    1 . 库文件 : 交叉编译需要的库文件就是上述 NDK platforms 目录下的 函数库 ;


    2 . --sysroot 头文件与库文件查找目录设定 : 使用 --sysroot=XX 参数设置 ;

    指定本次编译的 头文件 与 库文件 , 系统会自动到 XX/usr/include 目录下查找头文件 , 到 XX/usr/lib 目录下查找库文件 ;



    IV . 指定编译的头文件



    1 . -isysroot 头文件查找目录设定 : 使用 -isysroot YY 参数设置 ;

    指定头文件查找目录 , 系统还会自动到 YY/usr/include 目录下查找头文件 ;

    注意 : 该配置会覆盖 --sysroot=XX 参数查找头文件的配置 ;


    2 . 同时设置 --sysroot=XX -isysroot=YY 情况 :


    如果同时设置了 --sysroot=XX -isysroot=YY 两个参数 ,

    会去 XX/usr/lib 目录下找库文件 ,
    到 YY/usr/include 目录下查找头文件 ;

    ( 此时不再去 XX/usr/include 目录下查找头文件 )


    3 . -isystem 设置头文件查找路径 : 使用 -isystem ZZ 参数设置 ;

    设置后系统会直接去 ZZ 目录下查找头文件 ;


    4 . -isysroot 与 -isystem 区别 :


    两种参数配置的查找路径不同 ,

    -isysroot 设定会去设定的目录下的 usr/include 目录下查找 .

    -isystem 会直接到设置的目录下查找 ;


    5 . -I 头文件查找目录 : 使用 -isystem KK 参数设置 ;

    设置后系统会直接去 KK 目录下查找头文件 ;


    6 . 头文件目录查找优先级 :

    优先级从高到底 : -I > -isystem > -isysroot



    V . 指定编译的库文件



    1 . -L 指定库文件查找目录 : 使用 -L AA 参数设置 ;

    设置该参数后 , 编译时系统会自动到 AA 目录下查找函数库 ;


    2 . -l 指定链接的库名称 : 使用 -l libxxx.so 参数设置 ;

    设置该参数后 , 系统会按照该路径加载该 libxxx.so 函数库 ;



    VI . 指定编译的头文件与库文件 示例



    1 . 设置临时环境变量 :

    export CC=/home/book/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc


    2 . NDK 头文件与库文件的目录 :
    ( 这里以 android-21 版本 ARM CPU 为例 )


    ① NDK 库文件目录 :

    /home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm/user/lib


    ② NDK 库头文件目录 :

    /home/book/NDK/android-ndk-r17c/sysroot/usr/include

    /home/book/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi/asm


    3 . 最终的指定头文件与函数库的编译指令 :


    $CC --sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include -isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi -pie main.c


    命令解析 :


    $CC : arm-linux-androideabi-gcc 交叉编译工具的临时环境变量 , 执行 $CC 相当于执行 /home/book/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc 命令 ;

    ② 指定函数库 :

    –sysroot=/home/book/NDK/android-ndk-r17c/platforms/android-21/arch-arm

    指定函数库目录 , 必须这么写 , 因为真正要查找的是下层目录中的 usr/lib 目录 ;


    ③ 指定头文件 : 这里使用的是 -isystem , 不是 -isysroot , 因此目录可以写的随意一些 ;


    -isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include

    -isystem /home/book/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi


    isysroot 指定的头文件必须在 usr/include 中 , -isystem 不必 ;


    ④ 指定需要在 Android 手机执行配置 : -pie


    4 . 编译结果 :

    在这里插入图片描述


    该编译出的 a.out 可执行文件 , 可以在 Android 手机中 , 使用命令行执行 ;

    手机必须 root 才可以执行 , 普通手机不能执行 ;

    展开全文
  • I . Ubuntu 中交叉编译 Android 动态 II . Ubuntu 中交叉编译 Android 静态



    I . Ubuntu 中交叉编译 Android 动态库



    1 . 要编译的源文件 : add.c 源文件 ;

    #include <stdio.h>
    
    int add(int a, int b){
    	return a + b;
    }
    

    2 . 共享动态库编译参数 : 编译动态库需要添加 -fPIC“-shared两个参数 ;


    3 . 编译命令 :


    ① 设置 编译器 临时环境变量 :

    export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc


    ② 设置指定 头文件和函数库 的临时环境变量 :

    export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"


    ③ 最终命令 :

    $CC $HEAD_LIB -fPIC -shared add.c -o libadd.so


    4 . 编译结果 : 在该目录下生成了 libadd.so 动态库 ;

    在这里插入图片描述

    root@octopus:~/NDK/001_Compile# ls
    add.c
    root@octopus:~/NDK/001_Compile# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# $CC $HEAD_LIB -fPIC -shared add.c -o libadd.so
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# ls
    add.c  libadd.so
    root@octopus:~/NDK/001_Compile# 
    

    目录中的 libadd.so 就是编译完成的动态库 , 该动态库可以放到 Android Studio 项目中使用 ;



    II . Ubuntu 中交叉编译 Android 静态库



    1 . 要编译的源文件 : add.c 源文件 ;

    #include <stdio.h>
    
    int add(int a, int b){
    	return a + b;
    }
    

    2 . 共享动态库编译参数 : 编译动态库需要添加 -fPIC参数 , 先输出 .o 文件 , 然后 根据 .o 文化生成 静态库 ;


    3 . 编译命令 :


    ① 设置 arm-linux-androideabi-gcc 交叉编译器 临时环境变量 : 用于生成 .o 文件 ;

    export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc


    ② 设置 arm-linux-androideabi-ar 工具 临时环境变量 : 使用 .o 文件生成静态库 ;

    export AR=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar


    ② 设置指定 头文件和函数库 的临时环境变量 :

    export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"


    ③ 最终命令 :

    $CC $HEAD_LIB -fPIC -c add.c -o add.o

    $AR r libadd.a add.o

    4 . 编译结果 : 在该目录下生成了 libadd.a 静态库 ;

    在这里插入图片描述

    root@octopus:~/NDK/001_Compile# ls
    add.c  libadd.so
    root@octopus:~/NDK/001_Compile# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# export AR=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# $CC $HEAD_LIB -fPIC -c add.c -o add.o
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# $AR r libadd.a add.o
    /root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar: creating libadd.a
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# ls
    add.c  add.o  libadd.a  libadd.so
    root@octopus:~/NDK/001_Compile# 
    root@octopus:~/NDK/001_Compile# 
    
    展开全文
  • Ubuntu交叉编译libusb

    千次阅读 2017-07-16 17:48:37
    Ubuntu交叉编译libusb 参考博客: http://blog.csdn.net/tycool/article/details/18842367 软件包:libusb源码:http://www.libusb.org/ 编译环境:主机:ubuntu 16.04 ARM交叉编译工具链: arm-linux-...

    Ubuntu交叉编译libusb库

    参考博客:

    软件包:libusb源码:http://www.libusb.org/

    编译环境:

    主机:ubuntu 16.04
    ARM交叉编译工具链: arm-linux-gnueabihf-
    

    步骤如下:

    1、下载libusb-1.0.9软件包和libusb-compat-0.1.4软件包(我实际没有用到这个库)http://www.libusb.org/

    2、解压

    tar -jxvf libusb-1.0.9.tar.bz2

    3、编译与安装

    $ cd libusb-1.0.9/ #进入libusb-1.0.9目录
    $ mkdir install #创建软件安装目录
    $ ./configure --build=i686-linux --host=arm-linux --prefix=`pwd`/install  CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ #配置编译环境
    $ make # 开始编译
    $ make install #安装

    说明一下:
    –build=i686-linux表示该软件在x86平台上被编译
    –host=arm-linux表示该软件编译完成后在arm平台上运行
    –prefix后面为软件安装目录

    4、检验编译结果是否就是ARM平台可用的库:

    ~/code/libusb-1.0.9/install/lib$ file libusb-1.0.so.0.1.0
    libusb-1.0.so.0.1.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=7cfde4289fc5e33bbb72707e4edc35b9b8f8b163, not stripped
    #查看.so库中可用的库函数:
    lambda@lambda:~/code/libusb-1.0.9/install/lib$ nm libusb-1.0.so.0.1.0
    00004824 T libusb_lock_event_waiters
    00003304 T libusb_open
    00003404 T libusb_open_device_with_vid_pid
    ...都是libusb函数,没有usb开头的函数

    编译libusb-compat-0.1.4软件包

    与编译libusb-1.0.9软件包的方法类似,但要注意编译libusb-compat-0.1.4(依赖于libusb-1.0.4的编译结果,故configure时需要额外指定其PKG_CONFIG_PATH)

    ./configure --build=i686-linux --host=arm-linux --prefix=`pwd`/install  CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ PKG_CONFIG_PATH=/home/lambda/code/libusb-1.0.9/install/lib/pkgconfig

    使用交叉编译后的libusb库

    1、需要将生成的库复制到开发板上程序才能运行。
    2、编写程序时我把库文件直接放在工程目录下了。
    3、Makefile书写

    #指定头文件目录
    INCLUDE_DIRS = -I. \
                -I./udb_busi/hid/libusb-1.0.9/include/libusb-1.0 
    #指定库文件
    LIBS_USB  = -lusb-1.0 -lpthread \
                -L./udb_busi/hid/libusb-1.0.9/lib 

    至此,完!

    展开全文
  • 0.前言  在较为复杂的项目中会利用到交叉编译得到的共享(*.so文件)。在这种情况下便会产生以下疑问,例如: ... 【3】交叉编译时如何指定共享  【4】程序运行如何查找共享  等等问题。
  • 交叉编译工具添加

    千次阅读 2017-08-22 09:36:21
    有时交叉编译时交叉编译工具需要一些的支持,且这些也得交叉编译并安装到交叉编译工具中 博客: http://blog.csdn.net/dlutxie/article/details/6769200
  • 文章目录I . 动态 与 静态II . 编译动态III. Android Studio 使用第三方动态IV ....编译链接 , 将整个文件打包到可执行文件中 , 造成可执行文件较大 , 但运行不需要文件 ; Android 与 ...
  • 交叉编译ncurses

    千次阅读 2016-07-25 17:39:49
    一. 环境(1) imax6平台 (2) 主机ubutun 12.04 64位系统 (3) 新建ncurses, target目录... 下载ncurses ncurses下载地址:http://ftp.gnu.org/pub/gnu/ncurses/ 我使用的是5.9版本的,选择这个版本主要考
  • 本篇文章关于linux开发中交叉编译时对于平台指定的技巧。 首先介绍一下交叉编译时平台相关的三个参数: --build:编译这个的平台 --host:编译完后这个要运行的平台 --target:这个和交叉编译工具链有关。...
  • OpenCV源码交叉编译android

    千次阅读 2019-03-10 15:34:42
    OpenCV源码编译android 之前的文章中介绍过如何源码编译OpenCV,但是当时编译的是pc的cpu版本,但是在使用中...交叉编译环境构建 首先需要下载android NDK,下载地址: https://developer.android.google.cn/n...
  • 随笔:交叉编译libcurl支持HTTPS

    千次阅读 2018-08-30 15:20:09
    2017年09月03日 10:19:...个人分类: 交叉编译库 提供: openssl和libcurl库百度云链接:https://pan.baidu.com/s/1ge2ZkMB 提取码:h29q 目的: 需要的编译结果:mips下的libcurl库支持HTTPS 关键:libcurl...
  • 交叉编译 udev

    千次阅读 2017-12-27 11:40:11
     编译时出错:    6> GEN src/extras/keymap/keys-from-name.h (standard input): No keywords in input file!   添加:--disable-keymap  即为:CC=arm-linux-gnueabihf-gcc ./configure --...
  • 最近在Android上交叉编译libcurl, 遇到` Unable to link function recv `, 但是同样的脚本, 在同事电脑上跑的好好的, 尴尬...这种环境问题是最烦人的了.... 搜了下, 找到如下sof, 说这个函数 `-lz , which is ...
  • Ubuntu下交叉编译Qt并移植至ARM板上

    千次阅读 2018-04-29 12:17:52
    环境:Ubuntu-14.04交叉编译器:arm-linux-gnueabi-4.5.1qt版本:qt-everywhere-opensource-src-5.6.2说明:交叉编译qt前,若要对触摸屏支持,则需先交叉编译安装tslib。可参考上一篇【Ubuntu下交叉编译tslib并...
  • opencv交叉编译生成静态,编译demo

    千次阅读 2018-01-28 21:22:46
    因工作需要,需在marvell平台上交叉编译出一个静态链接opencv的可执行文件,只调用了其中的imread,resize等少数几个函数。所以我最终只交叉编译了一部分的链接,video相关的基本都没有编译,这个后续也会描述到...
  • cmake指定交叉编译

    千次阅读 2019-02-15 15:24:26
    告知当前使用的是交叉编译方式,必须配置,CMAKE_SYSTEM_NAME即目标机target所在的操作系统名称,比如ARM或者Linux你就需要写”Linux”,如果Android平台你就写”Android”,如果你的嵌入式平台没有相关OS你即需要写成...
  • 本人移植mount,在powerpc交叉编译时,用到的blkid,需要到/home/user-name/ltib/rootfs/lib路径下查找。为了不改动源代码,这个问题如何解决呢?我找到了方法如下:   在整个工程的configure.in文件中加入...
  • 前言:  本文主要写给C...交叉编译工具:android-ndk64-r10-linux-x86_64.tar 交叉编译工具下载地址: 链接:https://pan.baidu.com/s/1VCttTraUoSh82ENVA4t3Og 提取码:sjwo 搭建交叉编译环境: 1、将an...
  • 交叉编译静态的链接顺序

    千次阅读 2012-09-20 15:53:27
    交叉编译时遇到:undefined reference to `XXX'. 解决办法: 一,用nm看看里边是不是有对应的符号: nm *.a/*.lib/*.so |grep "XXX" 二,看看是不是被strip过了: $ file libusb-1.0.a libusb-1.0.so....
  • 编译openssl: 1.下载openssl源码,我这里的为openssl-1.0.2o.tar.gz 2. 解压到指定目录,tar xzfopenssl-1.0.2o.tar.gz -C /home/up 3. 进入/home/up/openssl-1.0.2o 4. 执行./config no-asm -fPIC shared --...
  • 交叉编译

    千次阅读 2017-08-24 00:06:45
    在android开发的时候需要经常编译第三方c文件,可你编译的时候在电脑 运行在adnroid上,所以需要交叉编译实现。–sysroot 的作用 如果在编译时指定了-sysroot就是为编译时指定了逻辑目录。编译过程中需要引用的...
  • 最近在尝试编译curl,安装了其所需的openssl,在交叉编译curl的时候,按照网上给的配置教程,一步步来,最后出了问题,所以在这里记录一下自己的配置方法和问题解决方案: 参考:...
  • 一、交叉编译opencv 继上一篇博客:“在Linux下配置opencv”之后,我以为直接将编译命令:g++ `pkg-config --cflags opencv` -o TestOpencv TestOpencv.cpp `pkg-config --libs opencv` 中的g++直接改成arm-linux-...
  • 交叉编译:libcurl动态

    千次阅读 2019-06-19 20:10:58
    需要在海思板子上使用libcurl,实现访问url,下载...交叉编译是通过交叉编译器,编译出在对应硬件环境(板子)上执行的(静态/动态)或者二进制文件的过程。 相应的,如果想在Android下运行,需要使用Andr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,436
精华内容 12,974
关键字:

交叉编译时库指定