库移植核心:PC 交叉编译 ARM 架构库 → 拷贝头文件 + 库到开发板 → 配置链接路径 → 程序链接调用

要先环境准备

确认目标ARM设备的架构版本(如ARMv7、ARMv8)和运行环境(如Debian、Ubuntu)。安装交叉编译工具链,例如gcc-arm-linux-gnueabihf(ARMv7)或gcc-aarch64-linux-gnu(ARMv8)。

使用arm-linux-gcc编译出ARM可以运行的库文件

arm-linux-gnueabihf-gcc -fPIC -shared xxx.c -o xxx.so

注意:同一套源码可以编译出X86 和 ARM两种架构的库

X86版本的库文件会拷贝到系统PATH下的目录中,例:/lib
gcc main.c -lxxx        不需要指定库的路径

ARM版本的库文件不能拷贝到系统的PARH下的目录中,应该放在用户自行创建的目录中,例如:xxx/lib (xxx目录为家目录下的目录)
arm-linux-gnueabihf-gcc -lxxx -L xxx/lib 需要使用-L指定库的路径
程序运行时需要把库文件拷贝到ARM目标平台的PATH下的目录中
把库文件拷贝到ARM上(PATH下  普遍/lib /uer/lib)

在开发板上,需要先挂载目录

ifconfig eth0 192.168.1.123  //把ip设置一下

mount -o nolock,nfsvers=3 192.168.1.3:/home/linux/nfs /mnt //挂载一个目录,在开发板的mnt便可可以看见ip为它的主机的nfs目录下的所有东西

arm-linux-gnueabihf-gcc -fPIC -shared fun.c -o libfun.so    //编译动态库

cp libfun.so ~/nfs/ //拷贝到nfs下

//在ubuntu中先写一个测试程序 main.c
arm-linux-gnueabihf-gcc main.c -lfun -L ./    //要加-L ./ 指定路径为当前目录,不然会找不到
cp a.out ~/nfs/

//接着到开发板当中

cp libfun.so /lib    //要先将库拷贝到开发板的根目录下,不然程序运行会找不到,以后要替换的时候可以重新编译一个库

./a.out    //运行程序

cp a.out ~/    //拷贝到家目录下

如果要程序上电就运行

etc目录下的rc文件:这些都是一些脚本,在linux启动的时候,会一个一个遍历这个目录去执行这些脚本,启动一些程序,要想自启动,便把命令加到这些脚本里面

cd /etc/rcS.d    //进入最后遍历的这个里面

vi S99myapp

//在S99myapp当中:

#!/bin/sh
/home/root/a.out &    //&表示在后台运行

把sqlite3移植到开发板上:

1、先在官网上下载源码

2、解压压缩包:tar -zxvf sqlite-autoconf-3360000.tar.gz

3、运行配置文件:./configure --host=arm-linux-gnueabihf --prefix=/home/linux/sqlite-install

        1. ./configure
        运行配置脚本(你刚才已经成功运行过)
        2. --host=arm-linux-gnueabihf
        指定 给 ARM 开发板编译(IMX6ULL 必须用这个)
        3. --prefix=
        最重要!
        = 后面写的就是 安装路径
        也就是编译好的库、头文件最终放在哪里。
        4. /home/linux/sqlite-install

4、继续执行编译安装
        make -j4
        make install

5、编译结束过后,在源码目录下生成dist-sqlite3文件夹

安装完成后,库 & 头文件路径:
头文件:/home/linux/sqlite-install/include
库文件:/home/linux/sqlite-install/lib

6、# 拷贝头文件到NFS根文件系统 cp /home/linux/sqlite-install/include/* /home/linux/nfs_root/usr/include/ #

拷贝ARM动态库到NFS根文件系统 cp /home/linux/sqlite-install/lib/libsqlite3.so* /home/linux/nfs_root/usr/lib/

7. 开发板端验证(挂载 NFS 后)

        ls /mnt/usr/include/ # 能看到 sqlite3.h 就对了
        ls /mnt/usr/lib/ # 能看到 libsqlite3.so* 就对了

8、复制到系统目录并刷新缓存

        cp /mnt/usr/include/sqlite3*.h /usr/include/
        cp /mnt/usr/lib/libsqlite3.so* /usr/lib/
        ldconfig

补充:

1、如果板子上本来就有sqlite3,可以先把板子上的删除掉

2、如果板子自带 老版本 sqlite3 命令行工具,
        2.1、先删除系统旧sqlite3        rm /usr/bin/sqlite3
        2.2、Ubuntu 终端执行,把同版本 sqlite3 程序放进 NFS
                mkdir -p /home/linux/nfs/usr/bin
                cp /home/linux/sqlite-install/bin/sqlite3 /home/linux/nfs/usr/bin/
        2.3、回到板子,再拷贝:
                cp /mnt/usr/bin/sqlite3 /usr/bin/
                chmod 777 /usr/bin/sqlite3 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐