最近用到一个第三方开源项目bcc(https://github.com/iovisor/bcc),由于某些原因,需要采用chromium的GN构建系统,将bcc一起构建进quic项目中来。阅读完谷歌官方的GN文档后,如下是重要的配置项: 配置完后,开始用gn构建,然后ninja编译了。然后一堆问题,只能一一去解决了。 1.error: [chromium-style] 明显这是chromium特有的编写格式检查,用的是第三方库bcc,代码规范有很多不符合chromium规范要求的,怎么办呢?看来只能按着要求一一改第三方库了,具体每个错误如何改,官方链接有详细说明。 我把第三方库报错的格式规范都改了,终于可以处理了,但是过程真的太费时费力了。还有没有不改第三方库源码的方法呢,答案是有的,通过深读chromium根目录build文件下全部的gn文件,发现如下构建代码: 这项配置由BUILDCONFIG.gn文件启用了,我们启动gn构建时,增加clang_use_chrome_plugins=false,即可避免chromium-style的格式检查。 2.error: exception handling disabled: 报出这个错,很明显gn构建工具默认加了-fno-exceptions 编译参数了,好吧,该怎么解决呢? 可以在自己写的gn文件内部加入cflags参数-fexceptions,但是这无法传递到第三方依赖库,可以内部配置configs解决这个问题。 3. error:undefined symbol: 编译通过,链接的时候出现这个错误,问题当然不是c和c++互相调用extern c的低级问题。具体错误可能参看这篇文章: https://blog.csdn.net/Three_dog/article/details/104701644/ 是不是文章所述的问题呢,用nm分别进去看了一下动态库.so和编译出来的.o里找不到的符号到底怎么写的: 很明显就是底层依赖库基础字符串不一致的问题了(libstdc++和libc++),问题找到,就很简单了,不一致换成一致就好了,改第三方库的基础依赖库,或者改chromium的依赖库就可以完成了。
executable("my_project") { sources = [#源码.c和.cc] include_dirs = [#头文件] lib_dirs = [ #增加链接时库的搜索目录] libs = [#增加链接时依赖的静态库和动态库] #还有很多其他配置例如cflags、configs等 #configs下配置的参数是可以传递给依赖项的,其他参数直接定义的无法传递 }
config("find_bad_constructs") { if (clang_use_chrome_plugins) { cflags = [] # The plugin is built directly into clang, so there's no need to load it # dynamically. cflags += [ "-Xclang", "-add-plugin", "-Xclang", "find-bad-constructs", ] if (is_linux || is_android || is_fuchsia) { cflags += [ "-Xclang", "-plugin-arg-find-bad-constructs", "-Xclang", "check-ipc", ] } } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算