参考资料:

How to use GCCE 4 with Symbian SDKs

Carbide C++的编译器

在Symbian开发工程中,Carbide C++是非常好用的开发工具,目前提供GCCE,ARMV5和RVCT三种编译器的支持。前两种编译器是免费的,RVCT是收费的编译工具,网上下载的Carbide并不默认提供,需要自己下载并配置才能使用,由于RVCT提供了专门的优化,编译结果的目标文件体积很小,且代码执行效率更高,但问题是该编译器费用比较昂贵,普通开发者很难承担。

目前,开发者中使用GCCE的比较多,但使用GCCE的问题是,默认提供的GCCE的版本比较老,在C:\Program Files\CSL Arm Toolchain\arm-none-symbianelf\bin\gcc -v可以看到,默认的GCC版本是2005年Release的3.4.3。在Codesourcery的网站上可以看到,目前最新的版本是2008年Q3Release的4.3.2版本。经过升级GCCE 4编译器发现,改进如下:

1. 编译速度显著提高,即使是第一次编译也能很快完成,可以节省开发者时间。

2. 生成的目标文件体积减小,根据不同项目,结果不太相同,大部分Sis文件可以缩小40%以上的大小。

3. 应该还有些代码和信息的优化吧,不明显。

4. 更严格的代码检查,理论上讲可以提高代码的质量。

升级GCCE编译器

相信上面4点足以让大家下决心升级GCCE编译器的版本了,但是终归没有免费的午餐,GCCE工具链是免费的,所以Codesourcery并不提供任何技术支持和保证。

下面说下升级过程:

0. 环境

由于Carbide开发环境的版本不同,升级过程可能略有不同,请仔细理解下列安装步骤,我的环境是:

Windows XP SP3

Carbide C++ 1.3.2 应该是网上升级后最新的Patch

S60_3rd_FP2_SDK 官方用的是S60_3rd_MR_SDK, 我测试了下载FP2上也没什么问题。

请备份所有需要修改的文件,以便能够恢复到原来的环境。

1. 首先从Codesourcery的网站上下载最新版编译器的安装文件并默认安装:

http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite

选择SymbianOS Sourcery G++ Lite Edition,选IA32 Windows Installer。

2. 安装完成后,替换3.4.3版本的编译器为新安装的4.3.2版本的编译器:

首先备份C:\Program Files\CSL Arm Toolchain\下的所有文件和文件夹(后面还会用到),并删除该文件夹下所有文件和文件夹,拷贝C:\Program Files\CodeSourcery\Sourcery G++ Lite\下的所有文件到C:\Program Files\CSL Arm Toolchain\

3. 给SDK打补丁

在$(EPOCROOT)Epoc32\tools\目录下的部分脚本文件由于直接使用了版本号等信息,需要手动更新到新的版本号,即从3.4.3升级到4.3.2。

在S60_3rd_FP2_SDK中,需要更改下面的文件:

cl_bpabil.pm

在S60_3rd_MR_SDK中,需要更改下面的文件:

cl_bpabi.pm

cl_gcce.pm

ide_cw.pm

compilation_config/gcce.mk

建议可以使用类似notepad++类的文本处理工具,搜索整个$(EPOCROOT)Epoc32\tools\目录及子目录内的包含版本号信息的内容,进行修改。

4. 移除GCC4中不允许的断言和冲突

在$(EPOCROOT)Epoc32\include\d32locd.h中注释掉下列断言:

__ASSERT_COMPILE(_FOFF(TLocalDriveCaps,iSize)%8 == 0);

__ASSERT_COMPILE(_FOFF(TLocalDriveCapsV3,iFormatInfo.iCapacity) % 8 == 0);

在$(EPOCROOT)Epoc32\include\gcce\gcce.h中注释掉下列声明:

typedef struct __va_list { void *__ap; } va_list;

#define va_start(ap, parmN) __builtin_va_start(ap.__ap, parmN)

#define va_arg(ap, type) __builtin_va_arg(ap.__ap, type)

#define va_end(ap) __builtin_va_end(ap.__ap)

并在相同位置添加下列代码行:

#include <libc/stdarg.h>

由于这个改动,指向标准C库中的stdarg.h所以需要在每个项目的MMP文件中添加一个路径:

SYSTEMINCLUDE \epoc32\include\libc

5. 移除SDK头文件中多余的修饰符

升级过编译器后,会出现很多类似错误信息如下:

error: extra qualification 'CAknVolumeControl::' on member 'ScaledValue'[/S60/devices/S60_3rd_FP2_SDK/epoc32/include/aknvolumecontrol.h]

找到相关的头文件,去除相应的部分即可,如:

TInt CAknVolumeControl::ScaledValue() const;//Original

TInt ScaledValue() const;//Modified

6. 4.3.2工具中 libsupc++.a的问题

在4.3.2的Release中,libsupc++.a(7kB)中缺少了一个_Unwind_GetTextRelBase的引用,这会导致在连接的过程中失败,将3.4.3中的libsupc++.a(15kB)替换即可。

7. 对于整除与运算的问题

由于在Symbian的SDK中遗漏了__aeabi__uidiv和__aeabi_idiv,所以在整除的时候会出现编译错误,解决方法是自己制作一个新的文件放在每个项目中的src/目录下,例如可以命名为division.c,文件内容为:

// This code was suggested by Julian Brown from CodeSourcery. It is in public domain. // Many thanks! //#if __GCCE__ //#if __SERIES60_30__ extern unsigned int __aeabi_uidivmod(unsigned numerator, unsigned denominator); int __aeabi_idiv(int numerator, int denominator) { int neg_result = (numerator ^ denominator) & 0x80000000; int result = __aeabi_uidivmod ((numerator < 0) ? -numerator : numerator, (denominator < 0) ? -denominator : denominator); return neg_result ? -result : result; } unsigned __aeabi_uidiv(unsigned numerator, unsigned denominator) { return __aeabi_uidivmod (numerator, denominator); } //#endif // __SERIES60_30__ //#endif // __GCCE__

此文件编译的时候会被自动加入来解决整除的问题。

最后,编译成功,查看一下你编出来的SIS文件小了多少,你应该能明显感觉到编译速度变快了,文件下载到真机上的速度也变快了(因为体积变小了)。

转载于:https://www.cnblogs.com/kevin8000903/archive/2009/03/24/1426752.html

如何升级Symbian Carbide C++的GCC编译器版本相关推荐

  1. 如何查看GCC编译器版本

    查看GCC编译器版本

  2. linux升级编译器,升级Linux系统中的gcc编译器

    一.准备工作 CentOS5.4发行版中的gcc版本为4.1.2,在编译gem5时出现错误,gem5要求gcc的版本在4.3以上,因此要对CentOS上得gcc进行升级.本文将gcc编译器升级到4.4 ...

  3. 遇到一个gcc编译器版本导致的运行结果有差异的问题

    正在进行的项目中有个网络模块,需要在上位机将数据包加密,然后在设备端将数据包解密.两者使用的加密方法是可逆的(大概是异或之类的).在我测试时,发现设备上解出来的数据不正常,得不到上位机未加密前的数据. ...

  4. 查看gcc编译器版本

    我们在windows下DS5中编译时使用GCC交叉编译器,但是在ubuntu时也需要使用GCC编译器,这时最好时保持版本一致,所以就需要查看windows下版本,如下图,在按装的文件夹中找到对应得文件 ...

  5. linux如何切换gcc版本,切换GCC编译器版本

    当前版本信息 root@ubuntu:runninglinuxkernel_4.0# aarch64-linux-gnu-gcc -v Using built-in specs. COLLECT_GC ...

  6. 手把手教你搭建Linux开发环境(VMware+Ubuntu)(四)——gcc编译器的安装和使用

    上回,我们已经把vim的安装.配置和使用说完了,今天我们就来谈谈Linux下gcc编译器的安装和使用. PS:还不会vim的同学,建议移步: Ubuntu下vim编辑器的安装.配置和使用 1.查看gc ...

  7. 不同版本GCC编译器之间的切换

    编译器版本有时太高,好多软件是运行会报错,所以最好安装多个版本的gcc编译器,用的时候来回进行切换 yum -y install gcc yum -y install gcc-c++ 这是安装gcc命 ...

  8. GCC编译器——GCC编译器的简介

    以下内容源于C语言中文网的学习与整理,如有侵权请告知删除. 参考内容 (1)C语言程序设计门户网站(入门教程.编程软件) (2)GCC官方文档网址 一.GCC编译器的由来 谈到 GCC编译器,就不得不 ...

  9. redhat下升级gcc编译器

    在有网络的环境下,采用下载gcc源码进行编译的方式升级gcc版本,所以需要本身已有gcc编译器. 获取 gcc-4.9.2的包: wget http://gcc.skazkaforyou.com/re ...

最新文章

  1. 利用urllib2实现http post请求源码示例
  2. window.print 固定表头不影响_Excel中的表头,你会处理吗
  3. 请求转发与请求重定向
  4. jsencrypt加密
  5. 服务器设置为自动登录,Windows Server 2008 R2怎样设置自动登陆(登录)
  6. android不能在主线程,安卓开发:主线程真的不能做UI操作吗?这一点很多程序员都没想到...
  7. 是介于小型机和微型计算机,第一章计算机基础解析.ppt
  8. Centos 6 系统镜像光盘做YUM源
  9. 2018年6月3号(线段树(3))
  10. springmvc框架原理学习
  11. python函数案例名片管理器_python实现名片管理器的示例代码
  12. java linkedlist源码分析_java8 LinkedList 源码解析
  13. 三星6818基于uboot的流水灯程序
  14. 新手python之BP神经网络——手写公式推导+可运行代码+编程中遇到的问题
  15. Java基础知识——IO流
  16. 微服务架构师封神之路09-Springboot多数据源,Hikari连接池和事务配置
  17. 坐标系统概念(转载)
  18. 2021高考成绩查询理综各科得分,2021四川高考总分及各科分数 满分是多少
  19. 富通天下(W 笔试)
  20. Arduino入门教程-软件安装

热门文章

  1. 时空计算机管理系统,用友时空软件计算机系统操作说明
  2. 运动健身买什么耳机好用、最优秀的健身耳机推荐分享
  3. PBD加密,PBD加密专家
  4. Error response from daemon: conflict: unable to delete 8e6aee9da407 (must be forced) - image is refe
  5. ACM、IEEE、Elsevier和Springer旗下期刊
  6. PLC实训 — 特殊功能程序
  7. [转载]中国3大移动公司(电信,联通,移动)频率分配大全
  8. android应用和苹果,苹果和安卓都可以用的经典app
  9. 12-19个月阅读书目推荐(BY 丹丹)
  10. 水果编曲软件FL Studio 21中文版功能介绍/下载/安装/激活图文教程及配置要求