在ubuntu 12.04 上将默认的gcc 4.6 改成gcc 4.4

本文详细介绍了如何在Ubuntu 11.10系统中将gcc版本从4.6降级至4.4,以解决Android编译时遇到的问题。通过修改gcc和g++的链接,确保了编译过程顺利进行,并验证了此方法的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ubuntu 12.04 版本上默认的gcc/ g++ 都是4.6 版本,编译Android 或是WR linux都会报错,需要将gcc 链接到 gcc 4.4 上,方法如下:

ubuntu 11.10的gcc版本是4.6.1,版本太高,编译android时出错,要把gcc版本改为4.4.3。

通过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库 。在安装gcc 4.4前该目录下是没有4.4目录的,安装gcc 4.4后该目录下就会多出4.4这个目录,且该4.4目录下有各种相应库文件。

ubuntu 32bit系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。

sudo apt-get install gcc-4.4

sudo apt-get install g++-4.4



装完后在/usr/bin目录下

$ ls -l gcc*

lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

发现gcc 链接到gcc-4.6,  需要将它改为链接到gcc-4.4 :

sudo mv gcc gcc.bak

sudo ln -s gcc-4.4 gcc


 

同理

ls -l g++*

lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6

-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4

-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6

需要将g++链接改为g++-4.4:

/usr/bin$ sudo mv g++ g++.bak

/usr/bin$sudo ln -s g++-4.4 g++



再查看gcc和g++版本号:gcc -vg++ -v均显示gcc version 4.4.6 ,说明gcc 4.4安装成功。

 

测试:

编译android,从2011-10-29 23:58开始,到2011-10-30 01:42编译完成,没有错误。这验证了gcc 4.4安装正确,也验证了android文件与高版本的gcc不兼容。

这次android完整编译一次耗时1小时44分钟,配置是i5+2G DDR3 ,  Ubuntu 11.10光盘安装。比以前那部T4400+2G DDR2快了41分钟。
### 编译C#代码为Linux共享库(.so) 为了将C#代码编译成适用于Linux环境下的共享库(`.so`),可以采用Mono项目提供的工具链来实现这一目标。下面介绍具体方法: #### 使用mkbundle创建动态链接库 虽然直接通过常规方式无法简单地把C#源码转换为.so文件,但是可以通过一些间接手段达成目的。一种常见做法是利用`mkbundle`命令配合特定参数操作[^1]。 然而更推荐的方式是在.NET Core环境下工作,因为自.NET Core 3.0起引入了原生支持跨平台开发的能力,并允许开发者构建AOT(Ahead Of Time Compilation)模式的应用程序或类库,这使得生成针对不同操作系统架构优化过的二进制成为可能[^2]。 对于希望基于最新技术栈进行开发的情况来说,建议按照如下步骤尝试: - 安装最新的.NET SDK版本; - 创建一个新的Class Library类型的项目; - 修改项目的属性设置以启用发布时的本地化编译选项; - 执行dotnet publish指令并指定相应的RID(Runtime Identifier),比如linux-x64作为目标平台; 最终会得到一个可以在Linux上加载使用的共享对象文件形式的产物。 ```bash # 更新软件包列表并安装必要的依赖项 sudo apt-get update && sudo apt-get install -y dotnet-sdk-7.0 # 初始化新的控制台应用程序工程 dotnet new classlib --name MySharedLibrary cd MySharedLibrary/ # 设置输出类型为DynamicLinkLibrary (.dll), 并开启AOT编译特性 echo "<PropertyGroup><OutputType>library</OutputType><PublishAot>true</PublishAot></PropertyGroup>" >> ./MySharedLibrary.csproj # 发布项目到指定目录下,同时指明运行时ID为linux-x64 dotnet publish -c Release -r linux-x64 --self-contained false # 将发布的.dll重命名为.so以便于兼容其他编程语言调用习惯 cp bin/Release/netstandard2.0/linux-x64/publish/*.dll /usr/lib/mysharedlibrary.so ``` 需要注意的是,在实际应用过程中还需要考虑ABI(Application Binary Interface)稳定性以及PInvoke互操作性等问题,确保所生产的.so能够被正确识别和调用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值