linux编译

Makefile终极详细说明书

随声附和 提交于 2020-01-22 22:44:02
该篇文章为转载,是对原作者系列文章的总汇加上标注。 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说

Linux编译出现Android can only be built by versions 3.81 and 3.82.

别来无恙 提交于 2020-01-22 21:27:17
意思是之前的make版本过高,需要安装低版本的make。之前在网上搜的安装方法无法解决我遇到的问题,所以我自己的解决办法如下: 1.下载make3.81 去ftp://ftp.gnu.org/gnu/make/ 下载目标版本: make-3.8.1.tar.gz 2.任意目录解压 tar -zxvf make-3.81.tar.gz 3.cd到解压目录下 cd make-3.81 4.进行配置 ./configure 5.编译代码 之前在这个步骤按照网上的办法是直接执行make来编译,但是会提示: 程序 ‘make’ 已包含在下列软件包中: make make-guile 请尝试:sudo apt install <选定的软件包> 查看README,发现是要执行sudo ./make install。 6.安装成功 make -version,显示版本为3.81。 来源: CSDN 作者: 布拉格广场的屋顶 链接: https://blog.csdn.net/qq_35067343/article/details/103769944

Linux 内核编译笔记

南楼画角 提交于 2020-01-22 18:17:01
  这几天处理一个线上设备异常重启问题,需要安装内核的debuginfo软件包。虽然OS团队提供了相关的debuginfo软件包, 但是还想自己尝试编译一次。   拿到了相关OS内核的src.rpm软件包,如下所示:   -rw-r--r-- 1 root root 82990501 Aug 8 2017 kernel-3.10.0-327.22.2.el7.cgsl1473.src.rpm    一般编译步骤如下: 安装src rpm包: # rpm -ihv kernel-3.10.0-327.22.2.el7.cgsl1473.src.rpm 注:一般会安装在/root/rpmbuild目录下 切换目录: # cd /root/rpmbuild 打补丁: # rpmbuild -bp SPECS/kernel.spec 编译内核的rpm: rpmbuild -ba SPECS/kernel.spec 编译完后,输出rpm包为: 如果想要指定安装目录,使用--define参数,编译过程如下: # rpm -ivh kernel-3.10.0-327.22.2.el7.cgsl1473.src.rpm --define "%_topdir /root/supermith" 安装目录信息: 切换目录: # cd /root/supermith 后面的命令也要带上--define参数

configure,make和make install关系

拥有回忆 提交于 2020-01-22 11:05:51
linux编译安装中configure、make和make install各自的作用 ./configure是用来检测你的安装平台的目标特征的。configure根据给定的参数和系统环境会生成Makefile控制代码。 make是用来编译的,读取Makefile中的配置对源码进行编译。 make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。 AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。 1、configure 一般用来生成 Makefile,为下一步的编译做准备。 你可以通过在 configure 后加上参数来对安装进行控制,比如代码: ./configure --prefix=/usr 将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。 同时一些软件的配置文件你可以通过指定 --sys-config= 参数进行设定。有一些软件还可以加上 --with、--enable、--without、--disable 等等参数对编译加以控制,你可以通过允许 ./configure --help 察看详细的说明帮助。 [不同软件的编译 configure 参数不同

编译内核步骤

两盒软妹~` 提交于 2020-01-22 08:02:44
编译内核的步骤: 将新内核解压到/usr/src/目录之下。以linux2.6.37.6版本内核为例,查看系统版本内核的命令是uname -a 原来安装的ubuntu系统假设是linux2.6.32-24,将linux2.6.32-24-generic/.config拷贝到linux2.6.37.6中,命令是: cp /usr/src/linux-2.6.37.6/ /usr/src/linux2.6.32-24 目的是将原来系统的配置文件导入到新的内核中。 以root权限进入心内核的目录之中,配置内核,命令: # make menuconfig (导入配置.config文件) 然后开始编译内核 # make 编译结束之后,# make modules_install 安装可选模块 然后安装必选模块 # make install 接下来生成initrd启动文件#update-initramfs -k 2.6.37.6 -c 更新grub启动菜单 update-grub 重启系统之后,进入新内核,使用uname -a 查看内核版本号。 以上就是编译内核的基本步骤。 来源: https://www.cnblogs.com/luosongchao/p/3193156.html

linux gcc 静态编译 减小体积

旧街凉风 提交于 2020-01-22 05:47:30
众所周知,Gcc编译的原始程序一般很大,其实有几种方法能大大减小目标代码的体积,一般有以下几种方法。 基本知识来源: http://www.mingw.org/wiki/Large_executables 1、禁用调试信息 Release编译时不要加上-g开关。 2、使用-Os编译程序。 不要使用-funroll-loops等可以加速程序执行但是会大大增加目标代码体积的开关。 3、编译后的程序使用strip去除符号和偏移(限于可执行程序和共享库,其他易出问题)。 4、如果你不需要RTTI,编译时加入-fno-rtti。 5、如果你不需要处理C++异常,编译时加入-fno-exceptions。 6、使用UPX之类的可执行程序压缩程序(只推荐用于可执行程序,用于其他也可,但是较浪费内存)。 例如,使用wxWidgets动态编译的程序初始体积可能有429KB,经过以上方式(未经UPX压缩)处理后,体积减少为108KB,UPX压缩后体积为35KB。 7、gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小 详细参考: https://blog.csdn.net/whatday/article/details/104053124 来源: CSDN 作者: whatday 链接: https://blog.csdn.net/whatday/article

java编译中出现了Exception in thread “main\" java.lang.UnsupportedClassVersionError

前提是你 提交于 2020-01-21 16:01:36
这个问题确实是由较高版本的JDK编译的java class文件试图在较低版本的JVM上运行产生的错误。 1、解决措施就是保证jvm(java命令)和jdk(javac命令)版本一致。如果是linux版本,则在命令行中分别输入java -version和javac -version命令来查看版本是否一致。这里假设都是1.7版本。 2、如果都一致,但还是解决不了问题,那么你肯定不是直接在命令行中用javac来编译的,而是用类似于eclipse、netbeans这样的编译器来编译的。因为很多编译器都自带javac,而不是采用操作系统中的编译器。如果你的编译器是eclipse的话,那么需要在项目的属性里设置jdk版本,方法是右击项目-->properties-->java compiler --> Enable project specific settings -->将compiler compliance level设置为1.7,也就是与jvm一致的版本(在命令行中java -version所显示的版本)。 综上,如果你是用编译器来编译的话,请首先确保编译器自带的jdk版本是否和操作系统中的java版本一致。 见下图: 来源: https://www.cnblogs.com/coder-wf/p/12221928.html

Linux 内核配置和编译

青春壹個敷衍的年華 提交于 2020-01-21 14:41:07
Linux 内核配置和编译 一。配置内核   (1). 为什么要配置内核     1. 硬件需求     2. 软件需求     选出需要的,去掉不要的   (2). 如何配置内核     1. make config       基于文本模式的交互式配置     2. make menuconfig       基于文本模式的菜单式配置       优点:直观,简单,高效       < > 不选择该功能       <m> 内核模块 不是随时随刻要使用的 B.o文件存到硬盘中,需要才添加到内存里面。节省内存       <*>B.O文件存到内存中,随时随地可使用的。   (3). 内核配置结果     ls -a 命令查看配置结果,保存在内核里面 二。编译内核   (1).编译内核----<*>     1.make zImage     2.make bzImage     *区别:在X86平台,zImage只能用于小于512K的内核     *如需获取详细编译信息,可使用:       #make zImage V=1       #make bzImage V=1     ** 编译好的内核位于arch/<cpu>/boot/目录下**   (2).编译内核模块----<M>     make modules 编译需要一个小时。     编译完需要将散落的*

am335x buildroot 编译报错解决 Incorrect selection of kernel headers: expected 3.2.x, got 4.6.x

瘦欲@ 提交于 2020-01-20 12:12:30
关于am335x buildroot配置请参照一下博客: http://www.myir-tech.com/bbs/thread-7134-1-1.html 在buildroot顶层目录下make,出现以下报错。 Incorrect selection of kernel headers: expected 3.2.x, got 4.6.x 原因是在交叉编译器路径下有一个内核版本代码 buildroot在执行check-kernel-headers.sh时会检测这这个内核版本代码 #define LINUX_VERSION_CODE 263680 在我的编译器路径是 /opt/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h 263680 = 40600(h) 所以移位得到4.6.x的内核版本 解决办法是: 通过计算得知LINUX_VERSION_CODE 应该为197120 197120 = 30200(h) 移位后为3.2.x。 #define LINUX_VERSION_CODE 197120 总结: 197120 = ‭00110000001000000000(b) = 30200(h)对应3.2.x版本内核

OpenCV学习记录——1.学习Android NDK

你。 提交于 2020-01-20 00:39:59
文章目录 1.前言 2.什么是NDK 3.为什么要用NDK 4.NDK编译出来的目标类型 5.NDK下载和NDK项目的创建 6.写个hello JNI可执行文件 6.1 程序编写 6.2 程序运行 7.相关配置文件的详解 8.写个 hello JNI 调用 so 8.1 程序编写 8.2 API讲解 8.3 程序运行 9.写个 hello from C++ 9.1 目录解析 9.1.1 JNILearn\app\libs 放置库文件 9.1.2 JNILearn\app\build 编译过程以及结果 9.1.3 rules.ninja 生成的编译命令 9.1.4 build.ninja 编译脚本 9.1.5 配置native方法 9.1.5.1 CMakeLists.txt 文件中内容,配置生成一个 so 库 9.1.5.2 build.gradle 9.2 流程分析 9.2.1 C++的代码,使用 CMake,编译成了 libnative-lib.so 库 9.2.2 MainActivity.java 加载 so 库 9.2.3 MainActivity.java 关联 so 库中方法 9.3 相关文档 9.4 JNI 执行调用流程 9.5 添加一个新的方法 10.CMake 和 ndk-build 的关系 11.使用 ndk-build 方案 11.1 jni 目录编写