ARM Linux:库移植
库移植核心: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
更多推荐

所有评论(0)