linux编译

Linux环境C语言编译与头文件等知识点小结

给你一囗甜甜゛ 提交于 2019-12-07 08:37:52
一、C语言的有关文件类型: 虽然,在Linux下“一切皆文件”,并且文件类型这个概念不是那么重要,一个“.c”文件可以用gcc编译,一个“.abcdef”文件照样可以用gcc编译。但是有类型的文件毕竟比无类型的文件更加具有直观性,所以我们还是得说说这个文件类型。 C语言的有关文件类型如下所示: .c /*源代码文件*/ .h /*C语言头文件*/ .i /*经过预处理之后的源代码文件*/ .s /*汇编代码文件*/ .o /*目标代码文件(二进制机器指令文件)*/ .a /*静态对象库文件*/ .so /*共享(动态)对象库文件*/ 一个程序的编译到运行gcc file.c执行了什么?其文件类型有何变化?如下图所示,最终我们只能看到a.out这个可执行文件: 二、gcc的有关选项参数与生成文件: 如果直接gcc file.c,就只会生成a.out执行文件,如果我们想看一下一个C语言文件从预处理到连接过程中各个文件的内容该怎么办?我们可以给gcc加上指定选项,进行指定操作,而不是由编译器直接生成a.out。首先说说这里会用到的重要的选项,如下所示: -o /*指定目标文件名*/ -E /*只进行预处理,不编译*/ -c /*只编译,不链接*/ -S /*汇编生成.s文件*/ -Wall /*显示所有警告,代码较长时最好加上*/ 我们来测试一下: (1)最初,我们只有一个main

常用编程语言介绍及各语言特点

最后都变了- 提交于 2019-12-07 06:48:14
一,编程语言 计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。计算机每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行的,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。 通用的编程语言有两种形式:汇编语言和高级语言。 1.1汇编语言 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。 1.2高级语言 高级语言是绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。 高级语言主要是相对于汇编语言而言

Ubuntu18.04编译vpp源码

梦想的初衷 提交于 2019-12-06 18:14:55
编译环境 (1)linux系统:ubuntu-18.04.2-desktop-amd64.iso (2)编译器:gcc-7.4.0/g++-7.4.0 编译步骤 (1)更新apt sudo apt-get update -y sudo apt-get upgrade -y (2)安装git sudo apt install git (3)下载vpp源码 git clone http://gerrit.fd.io/r/vpp 需要等待一段时间。 (4)安装软件 make: sudo apt install make make-guile: sudo apt install make-guile ssh:sudo apt install openssh-server (5)更新代码 git pull (6)编译 make wipe-release # rarely required make install-dep #下载vpp编译所需的依赖 sed -i '/RTE_EAL_IGB_UIO/ {s/n/y/g;}' build/external/packages/dpdk.mk #打开IGB_UIO驱动选项(有些虚拟机使用默认驱动会看不到网卡) make build-release 等待编译完成。界面如下: (7)build a vpp packge make pkg-deb (8

Suse环境下编译linux-2.6.24内核

限于喜欢 提交于 2019-12-06 17:58:25
Suse环境下编译linux-2.6.24内核 1.下载linux-2.6.24内核源码: https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.gz 2.解压linux-2.6.24.tar.gz文件,会生成linux-2.6.24目录 tar –xzf linux-2.6.24.tar.gz 3.编译环境构建 一般linux系统都自带gcc和make等编译工具,这里我的编译环境为SUSE Linux、gcc version 4.8.5、GNU Make 4.0 4.配置内核 linux提供了多种内核配置工具, 最基础的是 make config工具, 它列出每个编译选项, 而且是基于文本的 目前一般都推荐使用主流的make menuconfig工具, 但它需要curse库的支持, 在suse中默认是没有的, 所以在这里我使用的是make config工具 执行make config命令,自动生成.config配置文件 可能遇到以下错误: Makefile:434: *** mixed implicit and normal rules. Stop. 解决方法: 修改根目录下Makefile文件的第434行 -config %config : scripts_basic

在Ubuntu上下载、编译和安装Android源代码

给你一囗甜甜゛ 提交于 2019-12-06 14:29:48
A.主要资料来自一下链接, http://source.android.com/source/initializing.html 但是直接参照这个手顺执行时会有问题,下面的是碰到的问题,和如何解决。 我的环境是 Ubuntu 10.04,jdk6 B.编译的时候如下问题的解决方法,重新安装jdk You are attempting to build with the incorrect version of java. Your version is: WRONG_VERSION. The correct version is: RIGHT_VERSION. Please follow the machine setup instructions at https://source.android.com/source/download.html ********************************************************** 1. 从 java 官方地址下载最新 jdk6 # 目前最新是 jdk-6u34-linux-x64.bin 。 2. 移到 /opt 目录下执行 chmod a+x jdk-6u27-linux-x64.bin sudo ./jdk-6u27-linux-x.bin 添加环境变量: sudo gedit /etc

GOROOT、GOPATH、GOBIN、project目录 _(转)

六月ゝ 毕业季﹏ 提交于 2019-12-06 12:25:18
前言:我觉得java程序员学golang很容易上手。关于GOROOT、GOPATH、GOBIN这些环境变量的设置,我隐约感觉到了java的影子(尽管我是一个C++程序员),唯一和java不同的是不能设置“.”。 另外,golang的设计也很明显的透露着“约定优于配置”的原则。这在java很多框架里面很常见。golang的环境变量设计也是如此。从android和golang我觉得google喜欢java。 不了解java的C++程序员,可以尝试全新去理解golang。 GOROOT golang安装路径。 GOPATH 官方解释,请google。go工作环境中常常用到的一个很重要的环境变量(这种设计类似java)。具体用途:go命令常常需要用到的,如go run,go install, go get等。允许设置多个路径,和各个系统环境多路径设置一样,windows用“;”,linux(mac)用“:”分隔。 在linux(Mac)下,为了方便,一般配置在~/.bash_profile中。 book:~ wukebing$ vi ~/.bash_profile //编辑 book:~ wukebing$ source ~/.bash_profile //编辑完成后,使立即生效 例如:我的GOPATH设置(MAC下) export GOPATH=$HOME/workspace/go

deb ubuntu debian

痴心易碎 提交于 2019-12-06 09:24:53
Linux系统中,软件通常以源代码或者预编译包的形式提供。 软件源代码需要您亲自编译为二进制的机器代码才能够使用,安装比较耗时,不过您可以自行调节编译选项,决定您需要的功能或组件,或者针对您的硬件平台作出优化。 预编译的软件包,通常是由软件的发布者进行编译,您只要将软件拷贝到系统中就可以了。考虑到预编译软件包的适用性,预编译软件包通常不会针对某种硬件平台优化。它所包含的功能和组件也是通用的组合。 Ubuntu系统中,软件通常以“deb”格式的包文件发布,它是一种预编译软件包。deb包中除了包含已编译的软件,通常还包括软件的拷贝路径、对其它软件包的依赖关系纪录、一个比较通用的配置文件以及软件的描述、版本、作者、类别、占用空间等信息。 deb软件包命令遵行如下约定: soft_ver-rev_arch.deb soft为软件包名称,ver为软件版本号,rev为Ubuntu修订版本号,arch为目标架构名称 例如:azureus_2.4.0.2-0ubuntu2_all.deb 您需要使用“dpkg”命令来管理deb软件包: dpkg -i | --install xxx.deb 安装deb软件包 dpkg -r | --remove xxx.deb 删除软件包 dpkg -r -P | --purge xxx.deb 连同配置文件一起删除 dpkg -I | -info xxx.deb

Android下玩JNI的新老三种姿势

落爺英雄遲暮 提交于 2019-12-06 08:30:20
请尊重原创,转载请注明出处: http://blog.csdn.net/mabeijianxi/article/details/68525164 (本文已在 hongyang 微信公众号发布) 说明:本篇不撸代码,只玩编译,其包含了Android studio 2.2最新的JNI玩法 编译环境:macOS 10.12.3 工具包含:Android Studio 2.2 NDK-r14 在Android下要玩jni首先下载ndk是必须的,可以直接去 https://developer.android.google.cn/ndk/downloads/index.html 下载,当然我们家AS为开发者也提供了便捷 只需如图勾选然后OK即可,我的版本是r14,值得一提的是 google ndk-build 命令在 r13 后默认使用 Clang ,并将在后续版本中移除 GCC ,其编译速度更快、编译产出更小、出错提示更友好。 一、徒手编写Android.mk然后ndk-build编译: 这种编译其实是用make工具来玩的,在 linux 徒手写并编译过c的应该很清楚,通过编写makefile,然后再用make编译已经比不停的用gcc命令逐个编译要爽很多,但是 makefile 的编写还是有点蛋疼。程序员都是化繁为简善解人意的,通过 ndk 工具我们无需自己写 makefile 了

Dbus的编译和安装

别来无恙 提交于 2019-12-06 08:15:16
下载地址为http://permalink.gmane.org/gmane.comp.freedesktop.dbus/15992 error: cannot run C compiled programs echo ac_cv_have_abstract_sockets=yes>arm-linux.cache ./configure --prefix=/wsh_space/my_install/usr/lib --host=arm --build=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc -L/wsh_space/my_install/usr/lib/lib -I/wsh_space/my_install/usr/lib/include" --cache-file=arm-linux.cache --with-x=no --libdir=/wsh_space/my_install/usr/lib/lib --includedir=/wsh_space/my_install/usr/lib/include ./configure --prefix=/wsh_space/my_install/usr/lib --host=arm --build=arm-linux CC="arm-cortex_a9-linux-gnueabi-gcc

Linux 动态库相关知识整理

会有一股神秘感。 提交于 2019-12-06 06:39:50
动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处。作者是一个Linux后台开发,这些知识经常用到,所以整理了一下这方面的知识。静态库相对简单,本文只关心Linux平台下的动态库。 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //elfhash.h #include unsigned long ELFhash( const char * key); //elfhash.c #include "elfhash.h" unsigned long ELFhash( const char * key) { unsigned long h = 0, g; while ( *key ) { h = ( h > 24; h &= ~g; } return h; } 接下来使用gcc编译以上代码,并用ld将编译的目标文件链接成动态库 1 2 gcc -fPIC -c -Wall elfhash.c ld -shared elfhash.o -o libelfhash.so 其中 -fPIC 意思是生成位置无关的代码(Position