当前位置:首页 » 编程软件 » 源码构建编译

源码构建编译

发布时间: 2023-01-30 08:05:59

1. 如何编译 netty 源码并导入android studio

思路一:下载源码,自己下载依赖lib,构建编译环境,成功;
1. 从maven 地址下载,一般关心下面红色的3个,带sources的肯定就是源码了,但是里面没有相关依赖关系,这个可以看 .pom 文件;
将sources.jar 变为zip 文件,解压出来;
在你项目的 androidstudio project 中新建一个 java library;命名为 nettylib-4.0.14
将2中源码文件io/netty/ 拷贝到src/main/Java/ 目录下
studio sync,编译看报错的地方,或者根据 1 中地址里面的 pom 文件,找到netty 编译需要依赖的第三方 jar
依赖jar 查询地址: http://www.findjar.com/index.x?
最后nettylib-4.0.14 中的 build.gradle 配置如下:

其中会遇到不少问题,我搞了很久,因为走了些弯路,如上图,我直接贴出来配置了,但是仍然有少数的文件会报错,因为和项目无关,所有直接删掉啦;
编译可能会遇到各种错误,我就不一一贴出来了,大家有问题,请留言;
思路二:在github上下载源码,并且按照其设置来配置编译环境
git 源码地址:https://github.com/netty/netty/tree/netty-4.0.14.Final
编译环境搭建:http://netty.io/wiki/setting-up-development-environment.html
主要有eclipse +maven 和使用IDEA
1. 使用eclipse +maven,比较容易报错,因为eclipse 和maven 可能有不兼容的情况;
建议使用前最好,进入netty下载目录,
1。mvn install 在本地Repository中安装jar
2。mvn eclipse:eclipse 生成eclipse项目
然后就多了 .classpath 和 .project,可以直接导入eclipse
我2种都试过啦,eclipse 报错比较难搞定,最后使用的是IDEA;
直接以maven 工程导入就行了,导入后,编译也ok

2. 源码怎么编译

使用编译器如VC++6.0,VC++2008

3. 自己可以编译安卓源码吗

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    4. 怎样从源码编译rom

    本帖最后由 pigjohn 于 2014-2-10 20:24 编辑

    一、你需要:
    1.linux系统环境
    教程使用ubuntu 12.04(LTS)
    硬盘安装或虚拟机安装应该都ok。
    2.电脑配置不要太差
    二、搭建编译环境:
    1.java安装配置
    1) 删除旧版本java
    ctrl+alt+t 打开终端。
    sudo apt-get purge openjdk-\* icedtea-\* icedtea6-\*

    sudo apt-get purge sun-java
    复制代码
    2) 安装java 1.6
    添加软件源,打开终端输入
    sudo add-apt-repository ppa:webupd8team/java
    复制代码
    下载安装,打开终端输入
    sudo apt-get update && sudo apt-get install oracle-java6-installer
    复制代码
    跟随屏幕提示,你需要接受使用条款。
    安装完成后,终端输入java -version,你会看到java版本信息。类似
    java version “1.6.0_37″

    Java(TM) SE Runtime Environment (build 1.6.0_37-b06)

    Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01, mixed mode)
    复制代码
    2.安装依赖软件
    sudo apt-get install git-core gnupg flex bison gperf build-essential \

    zip curl zlib1g-dev zlib1g-dev:i386 libc6-dev lib32ncurses5-dev \

    ia32-libs x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 \

    lib32z-dev libgl1-mesa-dev g++-multilib mingw32 \

    tofrodos python-markdown libxml2-utils xsltproc readline-common \

    libreadline6-dev libreadline6 lib32readline-gplv2-dev libncurses5-dev \

    lib32readline5 lib32readline6 libreadline-dev libreadline6-dev:i386 \

    libreadline6:i386 bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev lib32bz2-dev \

    libsdl1.2-dev libesd0-dev squashfs-tools pngcrush schedtool libwxgtk2.6-dev
    复制代码
    等待安装配置完成
    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
    复制代码
    三、源码下载
    1.repo脚本下载
    $ mkdir ~/bin

    $ PATH=~/bin:$PATH

    $ curl [url]https://dl-ssl.google.com/dl/googlesource/git-repo/repo[/url] > ~/bin/repo

    $ chmod a+x ~/bin/repo
    复制代码
    2.初始化repo同步
    mkdir ~/cm11

    cd ~/cm11

    repo init -u git://github.com/CyanogenMod/android.git -b cm-11.0

    复制代码
    你需要按提示输入用户名和邮箱。
    3.9003device源码
    cd ~/cm11/.repo

    mkdir local_manifests && cd local_manifests

    gedit roomservice.xml
    复制代码
    粘贴以下内容
    <?xml version="1.0" encoding="UTF-8"?>

    <manifest>

    <project name="dhiru1602/android_device_samsung_galaxysl" path="device/samsung/galaxysl" remote="github" revision="cm-11.0" />

    <project name="dhiru1602/android_vendor_samsung_galaxysl" path="vendor/samsung/galaxysl" remote="github" revision="cm-11.0" />

    <project name="dhiru1602/android_kernel_samsung_latona" path="kernel/samsung/latona" remote="github" revision="cm-11.0" />

    <project name="CyanogenMod/android_packages_apps_SamsungServiceMode" path="packages/apps/SamsungServiceMode" remote="github" revision="cm-11.0"/>

    </manifest>
    复制代码
    保存。
    4.同步源码
    cd ~/cm11

    repo sync -j8
    复制代码
    源码有好几个G,同步时间长短取决于你的网络速度。
    四、编译
    1.编译之前同步最新源码
    repo sync
    复制代码
    2.初始化环境
    . build/envsetup.sh
    复制代码
    3.编译
    brunch galaxysl
    复制代码
    接着喝杯茶,编译时间长短取决于你的电脑配置。
    不出意外,你会最终得到~/cm11/out/target/proct/galaxysl/cm-11-XXXXX-UNOFFICIAL-galaxysl.zip
    五、刷机测试

    以上就是编译cm11的过程。

    对于其他rom,类似。
    mokee:
    mkdir ~/mokee && cd ~/mokee

    repo init -u https://github.com/MoKee/android.git -b kk_mkt

    5. proteus出现源代码构建失败如何解决

    检查Arino编译器。proteus出现源代码构建失败,需要检查Arino编译器。源码就是指编写的最原始程序的代码,运行的软件是要经过编写的,程序员编写程序的过程中需要的"语言"。

    6. 什么是源代码编译

    零基础的人想要写代码首先需要进行一定的学习,了解一些基础的编程知识,选择适合自己的程序语言,之后通过不断的学习就可以写代码。

    从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。这个过程中逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。

    C语言也好,python也好,得学会把自己的思考用程序实现。举个例子,想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;想做笔记、管理自己的文件,这也是一个程序。从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。

    代码组合

    源代码作为软件的特殊部分,可能被包含在一个或多个文件中。一个程序不必用同一种格式的源代码书写。例如,一个程序如果有C语言库的支持,那么就可以用C语言;而另一部分为了达到比较高的运行效率,则可以用汇编语言编写。

    较为复杂的软件,一 般需要数十种甚至上百种的源代码的参与。为了降低种复杂度,必须引入一种可以描述各个源代码之间联系,并且如 何正确编译的系统。在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代码修订的必备工具之一。

    7. c++中的编译,构建各是起什么作用

    编译:把当前源代码编译成2进制目标文件
    构建:先把工程中所有源代码编译成目标文件,再link链接成可执行文件(或者lib、dll,看具体工程)。这其中,如果有源文件在此之前被单独编译过,这个文件就不参加编译,它之前编译时产生的目标文件参加link(链接)过程。
    重新构建:就是不管之前有没有源文件被单独编译,都要参与编译。

    不同的C++编译环境可能不一定叫构建,但都有类似的功能。

    8. 如何自己编译源代码

    我们使用编译器将自己的源代码转换成目标代码, 使用链接器将我们的目标代码链接成一个可执行程序。另外, 我们使用一些程序在计算机中输入源代码文本并且编辑它。这些是最初的和最重要的工具, 它们构成程序员的工具集合或“程序开发环境”。 如果你使用的是命令行窗口, 就像很多专业程序员所做的那样, 你将不得不自己来编写编译和链接命令。如果你使用IDE(“交互式开发环境”或“集成式开发环境”), 就像很多程序员所做的那样, 简单地点击正确按钮就可以完成这个工作。附录C介绍了如何在你的C++实现中编译和链接。 IDE通常包括一个具有有用特性的编辑器, 例如用不同颜色的代码来区分你的源代码中的注释、 关键字和其他部分, 以及其他帮助你来调试代码、 编译和运行代码的功能。调试是发现程序中的错误和排除错误的活动, 你在前进的道路上会听到很多有关它的内容。 我们使用微软的Visual C++作?喑炭 ⒒肪呈道 H绻 颐羌虻サ厮怠氨嘁肫鳌被蚴恰癐DE”的某些部分, 那就是所指Visual C++系统。但是, 你可以使用一些提供最新的、 符合标准的C++实现的系统。我们所说的大多数内容(经过微小的修改)对所有的C++实现都将是正确的, 并且其代码可以在任何地方运行。在工作中, 我们使用几种不同的实现。

    9. 如何编译Docker源码

    本文根据docker官方给出的docker代码编译环境搭建指南做更深入的分析。官方给出的指导比较简单,但是由于国内的网络问题经常会编译失败,了解了编译步骤后,也可以结合自身遇到的网络问题进行“规避”。
    docker的编译环境实际上是创建一个docker容器,在容器中对代码进行编译。 如果想快速的查看编译环境搭建指导,而不关注环境搭建的机制和细节,可以直接跳到最后一章“总结”。

    前提
    机器上已经安装了docker,因为编译环境是个docker容器,所以要事先有docker(daemon),后面会创建个编译环境容器,在容器里面编译代码。本文中使用物理机,物理机上运行着docker (daemon)。
    机器(物理机)上安装了git 。 后续使用git下载docker源码
    机器(物理机)上安装了make。
    下载ubuntu 14.04的docker镜像

    下载docker源码
    git clone
    会把代码下载到当前目录下,后面会把代码拷贝到容器中。

    编译前分析
    官方给的编译方法是make build 和 make binary等。下面先分析Makefile,看懂Makefile后,编译环境的准备流程就比较清楚了。

    Makefile
    在下载的docker源码中可以看到它的Makefile,Makefile中比较关键的几个参数:
    DOCKER_MOUNT := $(if $(BIND_DIR),-v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/docker/docker/$(BIND_DIR)") DOCKER_MOUNT 表示创建容器时的mount参数。因为编译环境是一个容器,在后续的步骤中启动容器时使用DOCKER_MOUNT参数,会将物理机上的目录mount给容器容器,容器中该目录是编译生成docker二进制文件的目录。
    DOCKER_FLAGS := docker run --rm -i --privileged $(DOCKER_ENVS) $(DOCKER_MOUNT) 这是后面创建docker容器时的命令行的一部分,其中包含了前面的DOCKER_MOUNT参数。
    DOCKER_IMAGE := docker-dev$(if $(GIT_BRANCH),:$(GIT_BRANCH)) 这是docker image参数,镜像的名字是docker-dev,以当前git中docker版本作为tag名。这个镜像是在make build一步做出来的。
    DOCKER_RUN_DOCKER := $(DOCKER_FLAGS) "$(DOCKER_IMAGE)" 创建docker容器的命令行,组合了前面的DOCKER_FLAGS 和 DOCKER_IMAGE 。 从命令行中可以看出,启动容器使用的参数有 --rm -i --privileged,使用了一些环境变量,还有使用了-v参数把物理机上目录mount给容器,在容器中编译好二进制文件后放到该目录中,在物理机上就能获得docker二进制文件。启动的的docker 容器镜像名字是docker-dev。下文会介绍docker-dev镜像是怎么来的。
    由于官方给出的“构建编译环境”的方法是执行 make build,下面在Makefile中看到build分支是这样的:

    make build时会调用 docker build -t "$(DOCKER_IMAGE)" . 去制作一个叫做DOCKER_IMAGE的镜像。
    进行源码编译的方式是执行 make binary来编译代码,在Makefile中make binary的分支如下:

    make binary除了进行 make build以外,会执行$(DOCKER_RUN_DOCKER),即上文提到的docker run命令行。由于执行过了build,会build出来docker-dev镜像,所以在docker run时直接使用前面build出来的镜像。docker run时的命令行参数是hack/make.sh binary。make binary的过程实际上是创建一个容器,在容器中执行hack/make.sh binary脚本。接下来会详细介绍make build和make binary所做的内容。
    make build
    根据官方的指导,先执行make build来搭建编译环境。上面分析了,make build实际上是制作了一个镜像,这个镜像里会包含编译代码所需的环境。下面来介绍下这个镜像。

    Dockerfile
    在和Makefile相同的目录下(源码的根目录),有Dockerfile。执行make build 相当于调用docker build,使用的就是该Dockerfile。Dockerfile中的几个主要步骤(有些步骤这里略过):
    FROM ubuntu:14.04 使用ubuntu 14.04作为基础镜像;在宿主机上,要事先下载好ubuntu 14.04镜像。
    安装一些编译需要的软件;
    用git下载lvm2源码,并编译安装;
    下载并安装GO 1.5.1;
    安装GO相关的tools 可以做code coverage test 、 go lint等代码检查
    安装registry和notary server;
    安装docker-py 后面跑集成测试用的
    将物理机的contrib/download-frozen-image.sh 脚本拷贝到镜像中/go/src/github.com/docker/docker/contrib/
    运行contrib/download-frozen-image.sh 制作镜像 实际上这一步只是下载了3个镜像的tar文件。注意:docker build相当于创建一个临时的容器(在临时的容器中执行Dockerfile中的每一步,最后在保存成镜像),“运行contrib/download-frozen-image.sh 制作镜像”这个动作出现在Dockerfile中,相当于在docker build所创建的临时的容器中下载docker镜像,有docker-in-docker容器嵌套的概念。下一小节会对download-frozen-image.sh脚本做详细分析。
    ENTRYPOINT ["hack/dind"] 做出来的镜像,使用它启动的容器可以自动运行源码目录中的hack/dind脚本。 dind这个脚本是a wrapper script which allows docker to be run inside a docker container 。后面的小节会对hack/dind脚本做详细的分析。
    COPY . /go/src/github.com/docker/docker 把物理机上的docker源码文件打入到镜像中
    download-frozen-image.sh脚本
    上一小节里提到,在Dockerfile中,有一步会调用contrib/download-frozen-image.sh ,它主要作用是下载3个镜像的tar包,供后续docker load。在Dockerfile中的调用方式如下:

    download-frozen-image.sh脚本中会依次解析参数,其中/docker-frozen-images作为base dir,后面下载的东西全放到这里。之后的3个参数是镜像,里面包含了镜像名(例如busybox)、镜像tag(例如latest)、镜像id(例如),后面会在循环中依次下载这3个镜像的tar文件。
    download-frozen-image.sh脚本中会通过curl从registry上获取如下信息:
    token:获取token,后面curl获取的其他信息时都需要使用token。例如本例中 token='signature=,repository="library/busybox",access=read'
    ancestryJson:把镜像相关联的历史层次的id也都获取到,因为每一层的tar都需要下载。本例中 ancestryJson='["", ""]'
    这里可以看到这个镜像只有2层,两层的id这里都列了出来。 每个镜像包含的层数不同,例如。第三个镜像jess/unshare共有10层。
    VERSION、json、tar: 每一层镜像id的目录下,都下载这3个文件,其中VERSION文件内容目前都是“1.0”,json文件是该层镜像的json文件,tar文件是该层镜像的真正内容,以.tar保存。
    下载好的各层镜像目录结构如下:
    $ls

    $tree

    hack/dind脚本
    在Dockerfile中,ENTRYPOINT ["hack/dind"] ,表示在镜像启动后,运行该脚本,下面分析一下这个脚本的功能。
    脚本在代码根目录下的hack目录中,作者对脚本的描述是 DinD: a wrapper script which allows docker to be run inside a docker container.
    就是可以在docker容器中创建docker容器。它就做了一个事,那就是在容器中创建好cgroup目录,并把各个cgroup子系统mount上来。
    为了方便理解,我们可以先看看物理机。在宿主机上如果创建docker容器,需要宿主机上必须事先mount cgroup子系统,因为cgroup是docker容器的一个依赖。同理docker-in-docker也要求外层的docker容器中有cgroup子系统,dind脚本在容器启动后,先去/proc/1/cgroup中获取cgroup子系统,然后依次使用mount命令,将cgroup mount上来,例如mount -n -t cgroup -o "cpuset" cgroup "/cgroup/cpuset"
    最终在运行make build后,会制作出一个叫docker-dev的镜像。
    make binary
    执行make binary 就可以编译出docker二进制文件。编译出来的二进制文件在源码目录下的bundles/1.10.0-dev/binary/docker-1.10.0-dev ,其中还包含md5和sha256文件。

    Makefile中的binary
    Makefile中关于make binary流程是

    先执行build,即上一节介绍的,制作docker-dev编译环境镜像。
    再执行DOCKER_RUN_DOCKER,创建容器,DOCKER_RUN_DOCKER就是执行docker run,使用docker-dev镜像启动容器,并且会mount -v 将容器生成二进制文件的路径与宿主机共享。DOCKER_RUN_DOCKER在“编译前分析”一章中有介绍。启动的容器运行的命令行是 hack/make.sh binary 。docker run完整的形式如下:
    docker run --rm -i --privileged -e BUILDFLAGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXECDRIVER -e DOCKER_EXPERIMENTAL -e DOCKER_REMAP_ROOT -e DOCKER_GRAPHDRIVER -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "/home/mu/src/docker/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "docker-dev:master" hack/make.sh binary
    hack/make.sh脚本
    上一节提到的make binary中创建的容器启动命令是hack/make.sh binary,运行容器中的(docker源码目录下的)hack/make.sh脚本,参数为binary。
    make.sh中根据传入的参数组装后续编译用的flags(BUILDFLAGS),最后根据传入的参数依次调用 hack/make/目录下对应的脚本。例如我们的操作中传入的参数只有一个binary。那么在make.sh的最后,会调用hack/make/binary脚本。
    hack/make/binary脚本中,就是直接调用go build进行编译了,其中会使用BUILDFLAGS LDFLAGS LDFLAGS_STATIC_DOCKER等编译选项。
    如果最终生成的docker二进制文件不在bundles/1.10.0-dev/binary/目录下,那么可能是编译参数BINDDIR设置的不正确,可以在执行make binary时增加BINDDIR参数,例如
    make BINDDIR=. binary , 将BINDDIR设置为当前目录。
    总结
    编译步骤总结:
    1、编译前在物理机上安装好make、git,并下载好docker代码。下载好ubuntu:14.04镜像
    2、执行make build 。这步执行完会在物理机上创建出一个docker-dev的镜像。
    3、执行make binary 。 这步会使用docker-dev镜像启动一个容器,在容器中编译docker代码。编译完成后在物理机上直接可以看到二进制文件。默认二进制文件在 bundles/1.10.0-dev/binary/目录下
    4、docker代码里有很多test,可以使用此套编译环境执行test,例如 make test 。 更多参数可以看Makefile
    搭建环境心得:
    1、在make build时,使用Dockerfile创建制作镜像,这个镜像有40多层,其中一层失败就会导致整个build过程失败。由于Dockerfile中很多步骤是要连到国外的网站去下载东西,很容易失败。好在docker build有cache机制,如果前面的层成功了,下次重新build时会使用cache跳过,节省了很多时间。所以如果make build中途失败(一般是由于国内连国外的网络原因),只要重新执行make build就会在上次失败的地方继续,多试几次可以成功。
    2、如果其他人已经build出了docker-dev镜像,可以把它下载到自己的环境上。这样在自己make build时,会跳过那些已经在本地存在的层,可以节省时间。
    3、每一次编译会自动删除掉前面已经生成的二进制文件,所以不用担心二进制文件不是最新的问题。

    10. Android源码编译

    在编译源码之前需要做一些准备操作, 详细步骤如下:
    1. 安装JDK, google官方要求编译2.3源码需要JDK1.6.

    注意: ubuntu自带的源中速度比较慢, 有些软件找不到, 所以需要修改为国内的源, 修改源步骤如下:

    执行完上面几步, 数据源就更新完成了, 下面就开始安装编译依赖的软件, 同样, 在终端中以行为单位依次输入以下命令:

    热点内容
    java返回this 发布:2025-10-20 08:28:16 浏览:713
    制作脚本网站 发布:2025-10-20 08:17:34 浏览:978
    python中的init方法 发布:2025-10-20 08:17:33 浏览:687
    图案密码什么意思 发布:2025-10-20 08:16:56 浏览:839
    怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:745
    c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1085
    邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:314
    shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:194
    怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:882
    python股票数据获取 发布:2025-10-20 07:39:44 浏览:840