chromium构建工具GN的坑:error: [chromium-style]、 exception handling disabled、undefined symbol等

在构建第三方开源项目bcc时,使用Chromium的GN构建系统遇到了一些问题,包括[chromium-style]错误、exception handling disabled警告和undefined symbol链接错误。解决方法包括禁用chromium-style检查,启用exception handling,以及处理库之间的ABI不兼容问题。通过修改GN配置和第三方库的编译选项,成功地解决了这些问题。

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

    最近用到一个第三方开源项目bcc(https://github.com/iovisor/bcc),由于某些原因,需要采用chromium的GN构建系统,将bcc一起构建进quic项目中来。阅读完谷歌官方的GN文档后,如下是重要的配置项:

executable("my_project") {                          
    sources = [#源码.c和.cc]
    include_dirs = [#头文件]
    lib_dirs = [ #增加链接时库的搜索目录]
    libs = [#增加链接时依赖的静态库和动态库]
    #还有很多其他配置例如cflags、configs等
    #configs下配置的参数是可以传递给依赖项的,其他参数直接定义的无法传递                                                   
}

配置完后,开始用gn构建,然后ninja编译了。然后一堆问题,只能一一去解决了。

1.error: [chromium-style]

   明显这是chromium特有的编写格式检查,用的是第三方库bcc,代码规范有很多不符合chromium规范要求的,怎么办呢?看来只能按着要求一一改第三方库了,具体每个错误如何改,官方链接有详细说明。

   我把第三方库报错的格式规范都改了,终于可以处理了,但是过程真的太费时费力了。还有没有不改第三方库

### 客户端加载本地主机时发生异常的解决方案 当遇到 `Application error: a client-side exception while loading localhost` 的问题时,通常表明客户端在尝试连接到本地服务器的过程中遇到了某些障碍。以下是可能的原因以及对应的解决方法: #### 1. **浏览器缓存或Cookie冲突** 浏览器可能会因为之前的会话数据而导致加载失败。清除浏览器缓存和Cookies可以帮助解决问题[^1]。 #### 清除缓存的方法: - 打开开发者工具(F12 或右键 -> 检查)。 - 切换到“网络”选项卡并勾选“禁用缓存”。 - 强制刷新页面(Ctrl+F5 或 Cmd+Shift+R)。 #### 2. **检查浏览器控制台中的具体错误信息** 开发者工具中的Console标签页提供了详细的错误日志。通过分析这些日志,可以定位具体的异常原因[^1]。 如果发现类似以下错误消息: ```plaintext Uncaught TypeError: Cannot read properties of undefined (reading 'xxx') ``` 这可能是由于JavaScript文件未正确加载或存在语法错误引起的。 #### 3. **Chromium启动参数配置不当** 当使用Puppeteer或其他基于Chromium的库运行Web应用时,不恰当的启动参数可能导致兼容性问题。例如,默认启用的自动化标志 (`--enable-automation`) 可能干扰正常功能[^2]。 修改启动参数如下所示: ```javascript const optionsLaunch = { headless: false, devtools: false, defaultViewport: { width: 1200, height: 900 }, slowMo: 250, timeout: 0, ignoreHTTPSErrors: true, args: [ '--no-sandbox', '--disable-setuid-sandbox' ] }; ``` #### 4. **glibc版本与CPU架构不匹配** 若后台服务依赖于特定版本的glibc库,则可能出现类似于以下的日志输出: ```plaintext Fatal glibc error: CPU does not support x86-64-v2 ``` 此类问题是由于目标机器上的处理器无法满足所需的指令集支持所致[^3]。 解决办法包括升级操作系统内核至最新稳定版或将镜像替换为针对较低硬件规格优化过的变体。 #### 5. **防火墙设置阻止访问** 防火墙规则也可能阻碍外部请求到达指定的服务端口。确认SELinux状态以及iptables配置是否允许必要的流量通行至关重要。 --- ### 示例代码片段 下面展示如何利用Node.js调试环境变量来捕获更多上下文线索: ```javascript process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); }); ``` 此外,在生产环境中建议开启更详尽的日志记录机制以便快速诊断潜在隐患。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值