分类: 嵌入式
2015-03-29 20:25:49
交叉编译应用程序
(参考韦东山20141030_交叉编译应用程序.WMV)
arm-linux-gcc –o hello hello.c
默认头文件目录:工具链里的include目录 (include/stdio.h)
默认库文件目录:工具链里的lib目录 (文件最多的lib目录)
gcc –o hello hello.c
默认头文件目录: /usr/include/ /usr/local/include/
默认库文件目录: /lib /usr/lib/ /usr/local/lib
zfw@zfw-vm:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin
zfw@zfw-vm:~$ cd /usr/local/arm/4.3.2
zfw@zfw-vm:/usr/local/arm/4.3.2$ find -name stdio.h
./arm-none-linux-gnueabi/libc/usr/include/stdio.h
zfw@zfw-vm:/usr/local/arm/4.3.2$ find -name lib
编译选项:
-I <dir> // 指定头文件的目录,后面加目录的路径
默认的头文件目录是工具链的include目录
如果默认的头文件目录里面没有要包含的文件,就需要用-I 指定要包含的头文件目录
比如:gcc –I include –o hello hello.c // 当前目录下的include目录
-L <dir> // 指定库文件的目录
默认的库文件目录是:工具链里的lib目录
-l // 指定使用哪一个.so动态库
-ljpeg // 使用libjpeg.so这个动态库 (如果默认的库文件没有的话,就需要指定)
2. 万能命令
a. 有configure
./configure --host=arm-linux --prefix=$PWD/tmp
make
make install
--host : 指定交叉编译工具链
--prefix: 指定安装路径
如果不指定默认安装到/usr, /usr/local/
如果配置的时候出现错误:
configure: error:cannot compile a simple program, check and CFLAGS (cross compiling doesn’t work)
那么可以查看下config.log这个文件
find -name "*log" // 搜索config.log
vi config.log // G:跳到档尾 从最后往上看,查看第一个error
b. 没有configure
直接修改Makefile,把gcc改为arm-linux-gcc
常见错误:
a. 缺乏文件
./configure过程中出错时,可以打开config.log
从后面往上查找第1个错误
ac_nonexistent.h: No such file or directory
缺乏头文件,一般是缺乏某个库,把问题google,知道哪个库,那么就去编译它,把它拷贝到工具链
b. 缺少库
去交叉编译所依赖的库,把所得到的头文件,库文件,放入工具链
把库文件放入根文件系统
例子:
编译libusb时,提示:
configure: error: “udev support requested but libudev installed”
表示 libusb 依赖于 libudev
解决方法:编译libudev,或者配置libusb去掉某些功能
./configure –hely | grep udev
./configure --host=arm-linux --prefix=$PWD/tmp –disable-udev
下载libudev后,也是./configure --host=arm-linux --prefix=$PWD/tmp; make;
install
把头文件,库文件,放入工具链里的include,lib
把库文件放到开发板根文件系统和lib