精华内容
下载资源
问答
  • Linux Chromium源码编译

    千次阅读 2018-04-12 13:53:06
    LInux Chromium源码编译 LInux下Chromium采用gn+ninja编译方式。老版的gyp方式已被抛弃,并且在默认情况下(is_clang 标志位为true),会使用clang编译器。 GN通过Chromium源码中的GN文件,在编译目录(如out/...

    LInux Chromium源码编译

    LInux下Chromium采用gn+ninja编译方式。老版的gyp方式已被抛弃,并且在默认情况下(is_clang 标志位为true),会使用clang编译器。
    GN通过Chromium源码中的GN文件,在编译目录(如out/Default)下,生成build.ninja文件。ninja通过该文件,对Chromium进行编译。这里不关注gn和ninja,有兴趣的童鞋,可以参照下面的网址;

    获取Chromium源码

    设置编译环境

    • 设置depot_tools
     git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
     # you depot_tools path
     export PATH=$PATH:/xxx/xxx/xxx/depot_tools
     # 解压命令 tar -zxvf  xxxx.tar.gz
    
    • Set up the build
    cd ~/chromium/src
    # 运行该命令,有些人的终端可能会退出(exit命令)
    # 遇到此问题时,请注释调install-build-deps.sh中的exit命令
    # 如果提示无法安装字体库,请按照提示,加入不安装字体库参数
    . build/install-build-deps.sh
    # 编译andorid版Chromium
    . build/install-build-deps-android.sh 
    # 此步比较重要,请确认网络可以获取到所有内容(尝试VPN\代理\各种方法)
    # 保证此步安装成功,切勿修改相关脚本或程序,跳出安装步骤,并耐心等待
    gclient runhooks
    

    编译

    • 如果编译环境设置正确,此步基本不会遇到什么问题
    • gen生成.ninja文件
    # Linux
    gn gen out/Default
    gn gen out/Default --args='is_debug=false'  (Releas版)
    gn gen out/Default --args='target_cpu="x64" use_sysroot=false is_clang=false' (不使用clang编译)
    # Android
    gn gen out/Default --args='target_os="android" target_cpu="x86"'
    gn gen out/Default --args='target_os="android" target_cpu="x64"'
    gn gen out/Default --args='target_os="android" target_cpu="arm64"'
    gn gen out/Default --args='target_os="android" target_cpu="arm"' 
    
    • ninja编译
    #Linux
    ninja -C out/Default    (Chromium浏览器)
    ninja -C out/Default content/shell:content_shell   (Chromium content_shell)
    
    #Android
    ninja -C out/Default chrome_public_apk  (Chromium浏览器)
    ninja -C out/Default content_shell_apk  (Chromium content_shell)
    ninja -C out/Default system_webview_apk  (Android Webview)
    ninja -C out/Default webview_instrumentation_test_apk  (Android Webview test apk)
    
    • 运行Chrome浏览器或安装APK
    # Linux运行浏览器
    cd src
    out/Default/chrome
    # Android 安装apk
    cd src/out/Default/apks
    adb install chrome_public_apk
    
    • 额外:Chromium编译对配置有一定要求,特别时在link阶段,低配置(如内存4G及以下)的机器,容易卡住。
    展开全文
  • Linux之静态编译与动态编译

    千次阅读 2019-01-24 18:50:14
    可以事先对这些函数进行编译,然后将它们放置在一些特殊的目标代码文件中,这些目标代码文件就称为库,供其它程序使用(代码的复用) 库文件中的函数可以通过连接程序与应用程序进行链接,这样就不必在每次开发程序...

    日常编程中,常有一些函数在多个文件中使用(如数据库输入/输出操作或屏幕控制等标准任务函数)。可以事先对这些函数进行编译,然后将它们放置在一些特殊的目标代码文件中,这些目标代码文件就称为库,供其它程序使用(代码的复用)

    库文件中的函数可以通过连接程序与应用程序进行链接,这样就不必在每次开发程序时都对这些通用的函数进行编译了。库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。

    库分静态库和动态库两种,一般的静态编译即可以理解为加载静态链接库,静态链接库在程序编译时会被链接到目标代码中,程序运行时将不再需要该静态库;动态编译理解为加载动态链接库,在程序运行时才被载入,因此在程序运行时还需要动态库存在。下面分别进行阐述总结

    一、Linux下的动态库和动态编译

    动态函数库的扩展名一般为(.so),这类函数库通常名为libxxxx .so 。与静态函数库被整个捕捉到程序中不同,动态函数库在编译的时候,在程序里只有一个“指向”的位置而已,也就是说当可执行文件需要使用到函数库的机制时,程序才会去读取函数库来使用;也就是说动态库在可执行程序运行时才载入内存

    一般,在程序第一次执行或者第一次调用的时候,可能会在加载链接库的时候慢点,但这样减少看每个可执行文件的长度, 而且其他的程序如果发现内存中已经存在这个链接库的时候就不需要再次加载了。

    另外,动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度,也就是说使用共享库的可以使用库函数来迭代更新,应用程序将无需更改,只要函数的接口不变。

    示例

    1、使用gcc动态编译printf(“Hello,world”);生成动态链接库myhello

    gcc hello.c -fPIC -shared -o libmyhello.so
    
    • -shared:指定生成动态连接库
    • -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,导致动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

    动态库的名字一般是libxxxx .so,其中xxxx是该lib的名称

    2、动态编译main.c,链接myhello动态库,即指明动态链接库为myhello

    gcc -o hello main.c -L. -lmyhello
    

    其中-L选项,告诉hello库的位置在当前目录下

    在这里插入图片描述
    3、上面的测试结果可以发现,提示无法找到libmyhello,因为Linux系统默认从/usr/lib中找动态链接库,而该链接库在当前目录,自然找不到。解决这个问题主要有三个途径:

    • 可以把当前路径加入 /etc/ld.so.conf中然后运行ldconfig,或者以当前路径为参数运行ldconfig(要有root权限才行)
    • 把当前路径加入环境变量LD_LIBRARY_PATH中
    • 直接把该动态库复制到usr/lib目录中后运行ldconfig更新库

    测试中使用的是第三种方式,方便,不容易引起混乱。

    在这里插入图片描述
    在这里插入图片描述

    二、Linux下的静态库和静态编译

    静态函数库一般扩展名为(.a),这类的函数库通常扩展名为libxxx.a 。这类函数库在编译的时候会直接整合到程序中,所以利用静态函数库编译成的文件会比较,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。

    示例

    1、编译.c文件为.o文件gcc -c hello.c

    2、把目标文件归档ar -r libmyhello.a hello.o
    程序 ar 配合参数 -r 创建一个新库 libmyhello.a ,并将hello.o插入。如果库不存在的话,参数 -r 将创建一个新的库,而如果库存在的话,将用新的模块替换原来的模块。

    3、链接静态库libmyhellogcc -o test main.c -L. -lmyhello -static
    -L与动态链接命令中的一致,指明动态链接库在当前目录中,注意命令尾部还有一个-static说明,表明是静态编译。

    4、直接运行可执行文件test
    在这里插入图片描述

    三、静态编译相关静态库的安装

    1、先直接静态编译,看能否成功。

    2、如果不成功,则先动态编译,生成可执行文件

    3、ldd 可执行文件名命令查看该可执行文件依赖哪些动态库

    4、找到缺失的动态库,使用rpm -qf查看该文件对应的包
    在这里插入图片描述
    5、使用yum search搜索该缺失的包对应的库文件

    6、根据描述选择相应的静态库更新安装
    在这里插入图片描述
    7、完成上述步骤后重新进行回到步骤1,直到静态编译成功为止

    展开全文
  • 最近在编译ffmpeg是一直提示libx264找不到,找了半天时间发

    最近在编译ffmpeg是一直提示libx264找不到,找了半天时间发现x264 ./configure时候没有指定参数,其实应该加上参数,参数如下

     ./configure --includedir=/usr/local/include --libdir=/usr/local/lib --enable-shared 
    ffmpeg再configure就过去了,糖块用的ffmpeg版本是2.2.5的

    参考了这篇博主的文章,非常感谢,http://yezi.iteye.com/blog/139399

    展开全文
  • linux环境下编译Qt源码

    千次阅读 2019-10-31 13:17:52
    ubuntu-16.04环境下编译qt-5.12.5源码
    环境配置:Ubuntu-16.04

    1) 下载源码

    在官方网站:http://download.qt.io/archive/qt/5.12/5.12.5/single/上下载qt-everywhere-src-5.12.5.tar.xz
    在这里插入图片描述


    2) 解压

    xz -d qt-everywhere-src-5.12.5.tar.xz
    tar -xvf qt-everywhere-src-5.12.5.tar
    

    在这里插入图片描述


    3) 安装依赖

    • 安装flex词法分析器和bison语法分析器
    sudo apt-get install flex
    sudo apt-get install bison
    
    • 安装gperf哈希函数生成器
    sudo apt-get install gperf
    
    • 安装libxcb*,[参考]
    sudo apt-get install libxcb*
    
    sudo apt-get install build-essential
    sudo apt-get install libgl1-mesa-dev
    sudo apt-get install libglu1-mesa-dev
    sudo apt-get install libegl1-mesa-dev
    sudo apt-get install freeglut3-dev
    
    • 安装llvm(如果不用QDoc则不需要安装。强烈不建议安装,费时费力费空间)

    4) 执行configure

    强烈不建议在Qt源码的目录下直接进行编译,那样会污染源码所在目录。建议在Qt源码所在的同级目录下,新建一个文件夹用来存放编译过程中产生的临时文件。

    一定要注意源码路径不能含有中文!
    $ mkdir qt-5.12.5-build
    

    在这里插入图片描述
    进入qt-5.12.5-build文件夹执行configure-release是选择模式,-prefix /opt/qt-5.12.5指定编译之后库文件的安装位置为/opt/qt-5.12.5-install(完整路径是/home/username/opt/qt-5.12.5-install,一般源码包都会安装到系统opt目录下)。安装位置可自行更改。

    $ cd qt-5.12.5-build
    //安装到系统opt目录下
    ~/qt-5.12.5-build$ ./../qt-everywhere-src-5.12.5/configure -release -prefix /opt/qt-5.12.5
    //安装到源码同级目录下
    ~/qt-5.12.5-build$ ./../qt-everywhere-src-5.12.5/configure -release -prefix ../qt-5.12.5
    

    提示选择版本,输入o,回车

    在这里插入图片描述
    询问是否接受协议,输入y,回车

    在这里插入图片描述
    configure过程结束:

    在这里插入图片描述
    如果configure的结果出现:

    WARNINGsolutions
    Could not find qmake spec " .检查源码路径是否包含中文
    WARNING: gperf is required to build QWebEngine.sudo apt-get install gperf
    WARNING: flex is required to build QWebEngine.sudo apt-get install flex
    WARNING: bison is required to build QWebEngine.sudo apt-get install bison
    WARNING: QDoc will not be compiled.install llvm
    ERROR: The OpenGL functionality tests failed!install OpenGL
    NOTE: No wayland-egl support detected. Cross-toolkit compatibility disabled.sudo apt-get install libegl1-mesa-dev
    安装好对应依赖库后,需要进入qt-5.12.5-build文件夹执行rm config.cache以删除之前缓存的配置,然后再次执行configure

    5) 执行make

    这一过程大约需要半小时到4个小时不等。

    ~/qt-5.12.5-build$ make
    

    6) 执行make install

    命令前加上sudo保证安装文件夹不存在时自动创建。大概几分钟完成。

    ~/qt-5.12.5-build$ sudo make install
    

    7) 修改环境变量

    在终端输入:

    sudo gedit ~/.profile(or .bashrc)
    

    在打开的文件末尾加上下面的内容(/opt/qt-5.12.5-install是指定的库文件安装位置),保存修改并重启虚拟机。

    export QTDIR=/opt/qt-5.12.5-install
    export PATH=$QTDIR/bin:$PATH
    export MANPATH=$QTDIR/man:$MANPATH
    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
    

    在终端输入qmake -v,出现如下信息,说明qt源码编译并安装成功。

    在这里插入图片描述

    8) 新建test.cpp

    #include<QApplication>
    #include<QWidget>
    
    int main(int argc,char *argv[])
    {
        QApplication app(argc,argv);
        QWidget* pWidget = new QWidget;
        pWidget->setFixedSize(400, 300);
        pWidget->show();
        return app.exec();
    }
    

    9) 测试

    # 通过命令生成的pro文件,里面会缺少引用,最好还是通过QtCreator生成
    $ qmake -project
    $ qmake test.pro
    

    打开生成的test.pro文件,加入QT += widgets

    $ make
    $ ./test
    

    参考文章
    展开全文
  • Linux配置并编译内核

    万次阅读 多人点赞 2018-08-03 16:29:36
    如果你正在交叉编译,对ARM系统输入像"arm-unknown-linux-gnu-",对64位PC输入像"x86_64-pc-linux-gnu-"的字样。对其他处理器而言还有许多其他可能的命令,但是这个表太大了。一旦一名开发者知道他们想要支持的...
  • linux下gcc参数的使用以及编译过程

    千次阅读 2015-07-20 21:05:32
    v / --v / --version 查看gcc版本号-I目录 指定头文件目录,注意-I和目录之间没有空格-c 只编译,生成.o文件,不进行链接-g 包含调试信息-On n=1~3 编译优化,n越大优化的越多-Wall 提示更多告警信息(严格编译)-...
  • Linux内核编译

    千次阅读 2009-03-16 19:40:00
    如何编译Linux内核? 相信你会得到很多种不同的答案,而我在写此文章之前,总是获得一些编译错误的结果。如何你总是遇到编译错误或者失败,其实很多情况下是你下载的内核版本的问题,就是在高版本GCC中编译低版本的...
  • 今天首先来玩一玩linux内核的编译和下载。 1、背景交代 开发环境:64位的Ubuntu 14.04; 下载工具:SuperViVi USB Transfer Utility; 调试工具:SecureCRT 7.2.6; 2、编译步骤 首先按照友善之臂官方手册...
  • Linux 下 静态编译Qt程序

    千次阅读 2012-07-30 11:33:06
    一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的。...在Linux下如何静态编译Qt程序呢? 首先需要先安装静态编译的Qt,也就是静态编译Qt程序首先
  • 编译LINUX内核调整SCTP参数的方法

    千次阅读 2015-02-05 17:24:33
     sctp协议不匹配引发的内核编译。      公司的SIGTRANS在于华为HSTP进行联调时发现,华为的HSTP的SCTP层中INIT消息不认识我们的SCTP层中的INIT消息中的ECN\Forward TSN\ADAPTATION参数。      经过在...
  • Linux内核编译详细总结

    千次阅读 2018-03-12 16:16:31
    学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。 &nbsp; 二、实验内容 在Linux操作系统环境下重新编译内核。实验主要内容: A.&nbsp;查找并且下载一份内核源代码,本实验使用最新的Linux内核...
  • linux 下c 编译和调试

    千次阅读 2016-05-06 10:35:15
    linux下编写和调试c程序的环境搭建: 需要安装gcc编译器和gdb调试器。其中gcc编译器只能用rpm包或者用linux的安装盘里的gcc安装文件安装。查看是否安装gcc可用gcc -v来显示相关gcc信息,如显示如下内容: ...
  • linux2.6内核编译心得

    千次阅读 2008-02-20 21:46:00
    我是在vm下面用linux-2.4.20-8编译linux-2.6.8.1内核的,先下载了module-init-tools-3.0.tar.gz然后安装,如何安装可以看INSTALL文件。然后解压下载的内核源代码。在www.kernel.org下载。接着make menuconfig、mak
  • Linux 6 下编译安装 PHP 5.6

    万次阅读 2016-07-15 11:26:32
    PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用...语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。...本文描述基于CentOS 6.7下编译安装PHP 5.6.9。
  • Ubuntu Linux 上交叉编译FFmpeg Windows SDK

    千次阅读 2012-03-08 16:25:46
    FFmpeg 是一个开源且跨平台的音视频解决方案,集采集、转码、流式化为一...定制和编译ffmpeg是做流媒体开发迟早要面对的,Linux平台上相对简单,windows平台就比较麻烦了。本文的目的就是详细介绍下如何基于Ubuntu交叉
  • 定制linuxlinux内核编译

    千次阅读 2018-01-07 22:02:37
    自制linux系统 分区并创建文件系统 可以用u盘或者硬盘来安装制作一个精简版linux 将要安装linux的u盘或设备分区 fdisk /dev/sdb 分两个必要的分区 /dev/sdb1对应/boot /dev/sdb2对应根 / mkfs.ext4 /dev/...
  • C++ Boost在Windows和Linux下的编译安装

    千次阅读 2015-10-31 03:32:05
    C++作为历史上最成功的语言之一,除了它具有面向对象的性质之外,还有一个非常重要的创新,那就是泛型编程。Boost作为一个泛型库,成为C++很多...本文介绍了Boost在Visual Studio 2012和Linux环境下编译安装的过程。
  • Qt5.5.0在Linux下静态编译

    千次阅读 2018-08-27 22:25:46
    本文章主要介绍Linux下QT静态编译环境的搭建,以及如何编译我们的程序board_driver。   1. 下载QT5.5.0源码 进入http://download.qt.io/official_releases/qt/5.5/5.5.0/single/   下载qt-everyw...
  • 编译比特币钱包时,需要依赖Boost库,由于编译时间较长,在“试一试”中浪费好长时间,所以把可以成功的过程记录下来吧。 下载Boost安装包 通过wget工具下载 wget ...
  • Linux下gcc编译生成动态链接库*.so文件并调用它 gcc -c test.c将生成test.o的目标文件 gcc -o app test.c将生成可执行程序app 动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的...
  • linux动态编译和静态编译

    千次阅读 2017-11-27 19:50:22
    用动态链接库编译生成的 可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直 接运行,不用再调用如.so般的依赖库文件,简单但不灵活。 静态链接库: 1、编译...
  • Win10 Linux子系统编译Android系统源码

    千次阅读 2019-11-21 23:09:22
    一、前言 听说win10合入了Linux作为一个子系统,起初只以为是类似虚拟机的...但仍然担心这个子系统并不如我所期望的那样完美,所以尝试着编译一下Android这个系统吧,如果能够编译Android成功,那么基本上也可以作...
  • Linux Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译Linux Makefile中纪录有文件的信息,在Linux Makefile时会决定在链接...
  • linux编译原理分析

    千次阅读 2014-06-09 09:52:49
    linux编译hello.c 程序,使用gcc hello.c,然后./a.out就可以运行;在这个简单的命令后面隐藏了许多复杂的过程,这个过程包括了下面的步骤 宏定义展开,所有的#define 在这个阶段都会被展开 预编译命令的处理...
  • linux编译安装libcurl(附使用示例)

    万次阅读 2016-06-15 20:35:35
    linux编译安装libcurl(附使用示例)  qianghaohao(Xqiang)  说明:在编译任何开源代码前可以先看看README, INSTALL等文件,会提供如何编译的信息。在 此教程中通过阅读README和GIT-INFO文件可以得到很多编译安装...
  • linux交叉编译nss3,nspr

    千次阅读 热门讨论 2020-02-18 21:54:11
    交叉编译nss3.5 本文使用 nss-3.50.tar.gz. NSS Dependencies Required: nspr-4.25.tar.gz. 第一步 首先交叉编译nspr ...参数: --with-mozilla Compile NSPR with Mozilla support 遇到以下报错时: ...
  • ubuntu下首先下载源文件jpegsrc.v6b.tar.gz,解压之后./configure 然后make 发现提示缺少libtool,虽然可以另外下载libtool再自己编译安装,但总感觉有点麻烦。看到了一个帖子用的是官网http://www.ijg.org/ 的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,912
精华内容 49,564
关键字:

linux参数提示编译

linux 订阅