gentoo设置单个软件编译的CFLAGS参数和patches

本文介绍了解决 Gentoo 升级到 GCC 5.3 后编译 Wine 出现的问题。通过给 GCC 打补丁和调整 CFLAGS 参数为 O0,成功解决了 Wine 的编译及运行 QQ 时崩溃的问题。

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

http://phpcj.org/gentoo%e8%ae%be%e7%bd%ae%e5%8d%95%e4%b8%aa%e8%bd%af%e4%bb%b6%e7%bc%96%e8%af%91%e7%9a%84cflags%e5%8f%82%e6%95%b0%e5%92%8cpatches/

[20160510]最新:gcc-5.3编译wine已修复。

gentoo升级到gcc-5.3后,编译最新的wine,始终有问题(详见:https://bugs.gentoo.org/show_bug.cgi?id=574044)。

这是gcc-5.3的一个bug,一直没有修复,解决办法无非是给gcc或者wine打补丁,上述链接中也给出了这两种方案。

给wine打补丁,每次wine版本升级之后,需要重新打,比较麻烦,原来我一直这样做。

直接给gcc打补丁,也比较麻烦,后来有人给出了一个傻瓜式方案,简单的多了:

sudo mkdir -p /etc/portage/patches/sys-devel/gcc-5.3.0
curl https://574044.bugs.gentoo.org/attachment.cgi?id=428646 | sudo tee /etc/portage/patches/sys-devel/gcc-5.3.0/wine-fix.patch 
sudo emerge -1 gcc-5.3.0
sudo emerge -1u wine

这样,wine就可以直接安装了。

但是这样做还有一个问题,编译出来的wine,运行QQ的话,还是不行,打开后会直接崩溃。yuking说是编译参数CFLAGS的问题,不能用O2,必须用O0才行,有人遇到过这个问题。

因此,编译wine时,需要将CFLAGS修改为O0。每次编译时都去修改,也比较麻烦。后来搜索出了一个单独给软件设置参数的方法:

sudo mkdir /etc/portage/env
sudo echo "CFLAGS=\"-O0 -march=native -fomit-frame-pointer -pipe\"" > /etc/portage/env/wine
sudo echo "=app-emulation/wine-9999 wine" > /etc/portage/package.env
sudo emerge -1u wine

当然,上面有些参数根据你的实际情况填写。
<think>嗯,用户问的是Gentoo的makeopts里的-l参数设置多少合适。首先,我需要回忆一下这个参数的具体作用。记得在Gentoo的文档里,makeopts是用来置Portage构建软件时的参数,通常包括-j-l这样的选项。 用户可能已经知道-j参数是用来指定并行编译的任务数,比如-j4或者-j$(nproc),但-l可能不太熟悉。需要确认-l的作用。根据记忆,-l参数是用来限制系统的负载平均值,防止在编译时系统负载过高导致卡顿或者其他问题。当系统负载超过设定的值时,make会暂停启动新的编译任务,直到负载降下来。 接下来要考虑的是如何解释这个参数的意义。比如,如果设置-l4.0,意味着当系统的1分钟平均负载超过4.0时,停止启动新的编译进程,但现有的进程会继续运行。这有助于保持系统的响应性,尤其是在多任务环境下。 然后用户想知道设置多少合适。这里需要考虑用户的硬件置,特别是CPU的核心数。通常建议将-l设置为CPU核心数的一定倍数,比如1.5倍到2倍。比如4核CPU可以设置为6.0到8.0。但具体数值还需要根据实际情况调整,如果用户经常在编译时进行其他任务,可能需要更保守的设置,避免系统过载。 另外,可能需要提醒用户,-l参数-j参数通常一起使用。例如,makeopts="-j4 -l6.0",这样在4个并行任务的情况下,负载不超过6.0时继续,超过则暂停。同时,需要测试不同设置下的效果,观察系统负载编译时间,找到最佳平衡点。 还要注意,不同的工作负载可能影响负载平均值,比如是否有其他进程在运行。如果用户同时运行虚拟机或其他高负载任务,可能需要更严格地限制-l的值。反之,如果系统专用于编译,可以适当放宽限制。 最后,确保用户理解如何查看当前负载平均值,使用uptime或top命令,这样他们可以根据实际情况调整参数。可能还需要提到,如果没有设置-l,Portage可能仅依赖-j参数,但负载过高时系统可能会变得不响应,所以合理设置-l可以提升使用体验。</think>Gentoo的`makeopts`参数中`-l`参数的作用设置方法如下: ### 1. -l参数的作用 `-l`参数(全称`--load-average`)用于控制编译时的系统负载限制。当系统1分钟平均负载超过设定值时,`make`会暂停启动新任务,直到负载降低到阈值以下。 用途: - 防止编译时系统过载 - 保持系统响应能力 - 平衡编译速度与系统可用性 ### 2. 典型设置建议 #### 基础公式: ``` -l <CPU核心数 × 1.5~2.0> ``` 例如: - 4核CPU → `-l6.0` 到 `-l8.0` - 8核CPU → `-l12.0` 到 `-l16.0` #### 实际调整建议: 1️⃣ **保守方案**(兼顾多任务): ```bash -l $(($(nproc) * 1)) # 例如4核设为4.0 ``` 适用场景:需要同时运行浏览器/IDE等图形程序 2️⃣ **平衡方案**(推荐默认值): ```bash -l $(($(nproc) * 1.5)) # 例如4核设为6.0 ``` 适用场景:轻度多任务+后台编译 3️⃣ **激进方案**(追求编译速度): ```bash -l $(($(nproc) * 2)) # 例如4核设为8.0 ``` 适用场景:专用编译环境,不进行其他操作 ### 3. 置示例 在`/etc/portage/make.conf`中: ```bash MAKEOPTS="-j$(nproc) -l6.0" # 假设4核CPU ``` ### 4. 验证与调试 1. 实时监控负载: ```bash watch -n1 "uptime; echo 'Cores: $(nproc)'" ``` 2. 测试不同值的表现: - 负载持续>阈值 → 编译速度下降但系统流畅 - 负载<阈值 → 全速编译 ### 5. 注意事项 - 需与`-j`参数合使用(例:`-j4 -l6.0`) - 数值建议设为浮点数(如6.0而非6) - 笔记本电脑建议采用保守设置 - 内存不足时可能需要降低阈值 建议通过`sudo emerge -e @world`进行全系统编译测试,观察系统响应性来最终确定最佳值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值