12、arm交叉编译程序问题点

    科技2022-07-12  128

    目录

    1、 头文件问题2、库文件问题3 . 运行 问题4、交叉编译程序的万能命令

    1、 头文件问题

    编译时找不到头文件。在程序中这样包含头文件:#include <xxx.h> 对于尖括号里的头文件,去哪里找它? 系统目录:就是交叉编译工具链里的某个 include 目录; 也可以自己指定:编译时用 “ -I dir ”选项指定。 怎么确定“系统目录”? 执行下面命令确定目录:

    echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

    它会列出头文件目录、库目录(LIBRARY_PATH)。 你需要在头文件目录中确定有没有这个文件,或是自己指定头文件目录。

    2、库文件问题

    链接程序时如果有这样的提示:undefined reference to `xxx’,它表示 xxx 函数未定义。 那么解决方法有 2: ① 去写出这个函数 ② 或是使用库函数,那需要在链接时指定库 怎么指定库?想链接 libabc.so,那链接时加上:-labc。 库在哪里? ① 系统目录:就是交叉编译工具链里的某个 lib 目录 ② 也可以自己指定:链接时用 “ -L dir ”选项指定 怎么确定“系统目录”?执行下面命令确定目录:

    echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v

    它会列出头文件目录、库目录(LIBRARY_PATH),你编译出库文件时,可以把它放入系统库目录。

    3 . 运行 问题

    运行程序时找不到库: error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory 找不到库,库在哪? ① 系统目录:就是板子上的/lib、/usr/lib 目录 ② 也可以自己指定: 运行程序用环境变量 LD_LIBRARY_PATH 指定,执行以下的命令:

    export LD_LIBRARY_PATH=/xxx_dir ; ./test

    LD_LIBRARY_PATH=/xxx_dir ./test

    4、交叉编译程序的万能命令

    如果交叉编辑工具链的前缀是 arm-buildroot-linux-gnueabihf-,比如 arm-buildroot-linux- gnueabihf-gcc,交叉编译开源软件时,如果它里面有 configure,万能命令如下:

    ./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD/tmp make make install

    就可以在当前目录的 tmp 目录下看见 bin, lib, include 等目录,里面存有可执行程序、库、头文件。

    Processed: 0.013, SQL: 8