本次采用最新的newlib2.4.0  ,在http://sourceware.org/newlib/ 网页上找。

1.配置:

root@wuh-Inspiron-5535:/home/wuh/newlib-cygwin/newlib# ./configure --build=x86_64-pc-linux-gnu --target=arm-none-eabi --prefix=/home/wuh/newlib2.2.0/build --with-newlib --enable-newlib-io-long-long --enable-newlib-register-fini --disable-newlib-supplied-syscalls --disable-nls 


--targe=arm-none-eabi,newlib从targe选项解析出目标配置为arm架构,无操作系统,加入相应的newlib编译目录。

--prefix,为newlib的配置安装目录

其中比较重要的编译选项变量CFLAGS_FOR_TARGET,采用Os优化,s3c2416为armv5t指令集,并且没有硬件除法、浮点,必须采用软浮点,如果配置s5pv210的库,应配置成armv7-a指令,采用硬浮点。库采用arm模式编译,二进制接口采用aapcs-linux。可加入其它的配置参数,使生成的newlib库更微小,适应于cortex-m0等单片机应用方案中,相关的配置选项,请查阅相关的newlib资料。


2.编译 make all

                          因为各个版本交叉编译工具链编译选项等的差异,可能编译出错,根据出错信息进行更正即可。

3.安装 make install                  路径为--prefix=/home/wuh/newlib2.2.0/build

4.修改Makefile       指定libm.so库


                         

                           头部加两行,分别在arm-linux-gcc 加$(CLDFLAGS)

                                                 CLDFLAGS:= -lm
                                                 CXXLDFLAGS:= -lm

                                                %.o : %.S
                                                    arm-linux-gcc ${CLDFLAGS} -o $@ $< -c
                                                %.o : %.c
                                                    arm-linux-gcc ${CLDFLAGS} -o $@ $< -c  

现在调用<math.h>  sin()等函数的c文件就可以编译通过了。



另:

newlib安装后,会生成一个库头文件目录以及相应的静态库,其中库头文件声明对于标准c库均是一致的,可以直接使用交叉编译工具链默认的c库头文件。主要从newlib中提取出libc.a、libm.a、libnosys.a这三个库。在开发项目时,修改默认的c库路径,使之链接newlib即可。libnosys.a由源码目录下\libgloss\libnosys源代码实现,为newlib操作系统接口层,基本为空实现,避免使用一些c库函数时的链接失败。在实现一些io操作、文件操作、内存分配、时间产生等需要操作系统调用。如果应用程序中未访问这些与系统调用相关的c库函数,无需libnosys.a。




Logo

更多推荐