做微商进哪个网站安全,jsp网站缓存在哪,五金模具技术支持 东莞网站建设,公司宣传册设计与制作图片1 程序运行的一些基础知识
1.1 编译程序时去哪找头文件#xff1f; 系统目录#xff1a;就是交叉编译工具链里的某个 include 目录#xff1b;也可以自己指定#xff1a;编译时用 “ -I dir ” 选项指定。 1.2 链接时去哪找库文件#xff1f; 系统目录#…1 程序运行的一些基础知识
1.1 编译程序时去哪找头文件 系统目录就是交叉编译工具链里的某个 include 目录也可以自己指定编译时用 “ -I dir ” 选项指定。 1.2 链接时去哪找库文件 系统目录就是交叉编译工具链里的某个 lib 目录也可以自己指定链接时用 “ -L dir ” 选项指定。 1.3 运行时去哪找库文件 系统目录就是板子上的 /lib、 /usr/lib 目录也可以自己指定运行程序用环境变量 LD_LIBRARY_PATH 指定。 1.4 运行时不需要头文件所以头文件不用放到板子上 2 常见错误的解决方法 2.1 头文件问题 编译时找不到头文件。在程序中这样包含头文件#include xxx.h 对于尖括号里的头文件去哪里找它 系统目录就是交叉编译工具链里的某个 include 目录 也可以自己指定编译时用 “ -I dir ” 选项指定。 怎么确定“系统目录” 执行下面命令确定目录 echo main(){}| arm-buildroot-linux-gnueabihf-gcc -E -v - 它会列出头文件目录、库目录(LIBRARY_PATH) 。 你需要在头文件目录中确定有没有这个文件或是自己指定头文件目录。 2.2 库文件问题 链接程序时如果有这样的提示undefined reference to xxx 它表示 xxx 函数未定义。 那么解决方法有 1. 去写出这个函数 2.或是使用库函数那需要在链接时指定库 怎么指定库想链接 libabc.so 那链接时加上 -labc 。 库在哪里 ◼ 系统目录就是交叉编译工具链里的某个 lib 目录 ◼ 也可以自己指定链接时用 “ -L dir ” 选项指定 怎么确定“系统目录”执行下面命令确定目录 echo main(){}| arm-buildroot-linux-gnueabihf-gcc -E -v - 它会列出头文件目录、库目录(LIBRARY_PATH) 你编译出库文件时可以把它放入系统库目录。 2.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 3 交叉编译程序的万能命令 如果交叉编辑工具链的前缀是 arm-buildroot-linux-gnueabihf-比如 arm-buildroot-linux-gnueabihf-gcc交叉编译开源软件时如果它里面有 configure 万能命令如下 ./configure --hostarm-buildroot-linux-gnueabihf --prefix$PWD/tmp
make
make install 就可以在当前目录的 tmp 目录下看见 bin, lib, include 等目录里面存有可执行程序、库、头文件。 3.1 把头文件、库文件放到工具链目录里 如果你编译的是一个库请把得到的头文件、库文件放入工具链的 include 、lib 目录里。别的程序要使用这些头文件、库时会很方便。 工具链里可能有多个 include 、 lib 目录放到哪里去 执行下面命令来确定目录 echo main(){}| arm-buildroot-linux-gnueabihf-gcc -E -v - 它会列出头文件目录、库目录(LIBRARY_PATH)。 3.2 把库文件放到板子上的/lib 或/usr/lib 目录里 程序在板子上运行时需要用到板子上/lib 或 /usr/lib 下的库文件程序运行时不需要头文件。 4.给 IMX6ULL 交叉编译 freetype freetype 依赖于 libpng libpng 又依赖于 zlib 所以我们应该先编译安装 zlib 再编译安装 libpng 最后编译安装 freetype。但是有些工具链里有 zlib, 那就不用编译安装 zlib 比如 STM32MP157 。 第 1 步 确定头文件、库文件在工具链中的目录 先设置交叉编译工具链 export ARCHarm
export CROSS_COMPILEarm-buildroot-linux-gnueabihf-
export PATH$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueab
ihf_sdk-buildroot/bin 它里面有 zlib 跟着视频操作即可 以 IMX6ULL 开 发 板 为 例 它 的 工 具 链 是 arm-buildroot-linux-gnueabihf-gcc可以执行以下命令 echo main(){}| arm-buildroot-linux-gnueabihf-gcc -E -v - 可以确定头文件的系统目录为 /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include 库文件的系统目录为 /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/../../../../arm-buildroot-linux-gnueabihf/lib 第 2 步 交叉编译、安装 libpng freetype 依赖于 libpng 所以需要先编译、安装 libpng 。命令如下 book100ask$ cp /home/book/01_all_series_quickstart/04_嵌入式 Linux 应用开发基础知识/source/10_freetype/libpng-1.6.37.tar.xz ./
book100ask$ tar xJf libpng-1.6.37.tar.xz
book100ask$ cd libpng-1.6.37
book100ask:~/libpng-1.6.37$ ./configure --host arm-buildroot-linux-gnueabihf --prefix$PWD/tmp
book100ask:~/libpng-1.6.37$ make
book100ask:~/libpng-1.6.37$ make install
book100ask:~/libpng-1.6.37$ cd tmp
book100ask:~/libpng-1.6.37/tmp$ cp include/* -rf /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/include
book100ask:~/libpng-1.6.37/tmp$ cp lib/* -rfd /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/../lib/gcc/arm-buildroot-linux-gnueabihf/7.5.0/../../../../arm-buildroot-linux-gnueabihf/lib 第 3 步 交叉编译、安装 freetype 命令如下 book100ask$ cp /home/book/01_all_series_quickstart/04_嵌入式 Linux 应用开发基础知识/source/10_freetype/freetype-2.10.2.tar.xz ./
book100ask$ tar xJf freetype-2.10.2.tar.xz
book100ask$ cd freetype-2.10.2
book100ask:~/freetype-2.10.2$ ./configure --hostarm-buildroot-linux-gnueabihf --prefix$PWD/tmp
book100ask:~/freetype-2.10.2$ make
book100ask:~/freetype-2.10.2$ make install
book100ask:~/freetype-2.10.2$ cd tmp
book100ask:~/freetype-2.10.2/tmp$ cp include/* -rf /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include
book100ask:~/freetype-2.10.2/tmp$ cp lib/* -rfd /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/