linux编译

用GDB Server进行远程调试

孤街浪徒 提交于 2019-12-25 06:43:25
某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于 嵌入式系统 资源比较有限,一般不能在目标板上直接构建GDB的调试环境,这时我们通常采用gdb+gdbserver的远程调试方法:gdbserver在目标板中运行,而gdb则在主机上运行。 构建gdb+gdbserver调试环境的在于,要将gdb和gdbserver都编译成适用于目标板的版本。比如我们用x86的主机和 ARM 目标板,平时在主机上直接调试的时候都使用用于x86调试的gdb,但这个gdb不能用于远程调试中,需要针对 ARM 平台进行配置之后重新编译才行;而gdbserver要运行在目标板上,则需要用arm-linux-gcc编译才行。 我们可以从 http://ftp.gnu.org/gnu/gdb/ 或其他站点下载GDB的源代码来进行编译。得到源代码包gdb-6.6.tar.gz之后,将target配置成arm- linux ,然后进行编译: $ tar xzvf gdb-6.6.tar.gz $ cd gdb-6.6 $ ./configure --target=arm-linux $ make $ make install 注意这时我们编译的是用于主机上的gdb程序,因此仍然用x86版本的gcc编译,而不是用arm-gcc。而接下来我们要编译的gdbserver程序则是运行在目标板上的,需要用arm

在Ubuntu-14.04.3配置并成功编译Android6_r1源码

喜你入骨 提交于 2019-12-25 05:43:59
在Ubuntu-14.04.3配置并成功编译Android6_r1源码 折腾了一周,终于把Android6_r1的源码编译成功。先上图,这是在ubuntu中运行的Android模拟器: 由于我是在win8中安装虚拟机VMware,然后在虚拟机中安装Ubuntu进行编译,所以遇到诸多麻烦。如果直接在linux中编译,可能会更顺利。 -------------------------------------------------------------------------------------------------------------------------- 准备工作: VMware虚拟机,安装请参考: VMware8安装配置Win7、CentOS-7向导 官网下载ubuntu镜像: ubuntu-14.04.3-desktop-amd64.iso 安装ubuntu,一并参考“VMware8安装配置Win7、CentOS-7向导” ----------------------------------------------------------------------------- 建议:ubuntu内存分配4G,预留90G虚拟硬盘(之前选择了默认的20G,在解压tgz的时候直接报空间不足),网络选择“Bridged”方式。 为了编译Android源码

linux下动态链接库.so文件 静态链接库.a文件创建及使用

こ雲淡風輕ζ 提交于 2019-12-25 02:51:16
转摘网址为:http://www.cnblogs.com/fengyv/archive/2012/08/10/2631313.html Linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 .a为静态库,是好多个.o合在一起,用于静态连接 .la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看 *.la文件的格式 $file *.la *.la: ASCII English text 所以可以用vi来查看其内容。 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 创建.a库文件和.o库文件: [yufei@localhost perl_c2]$ pwd /home/yufei/perl_c2 [yufei@localhost perl_c2]$ cat mylib.c #include <stdio.h> #include <string.h> void hello(){ printf("success call from perl to c library\n"); } [yufei@localhost perl_c2]$ cat mylib.h extern void

linux上编译并运行单个java文件

主宰稳场 提交于 2019-12-25 01:30:26
linux上编译并运行单个java文件 1、先创建java项目目录,名称project。 mkdir project 2、在项目中创建src和bin目录,src下用于存放 “.java” 文件,bin下存放 “ .class ” 文件。 cd project mkdir src bin 3、在src下创建包com.company。 mkdir -p src/com/company 4、在包中编写java文件,文件名为Test.java。 vi src/com/company/Test.java package com.company; // 包名 public class Hello{ public static void main(String[] args){ System.out.println("test success"); } } // vim中编写,完成后保存退出。 5、在bin目录下创建用于存放project项目中生成的class文件的目录。 mkdir bin/project 6、编译java文件,将生成的编译文件存放在bin/project下,其中的com/company目录会自动创建,因为“package com.company;”语句。“-d”表示指定生成class文件的位置。 javac ./src/com/company/Test.java -d .

三、zedboard Linux内核编译

隐身守侯 提交于 2019-12-24 16:18:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我们的目标是生成zedboard的启动文件首先需要工具和输入文件: Tools Required Xilinx SDK Input Files Required FSBL u-boot uImage uRamDisk.image.gz devicetree.dtb Output Files Produced boot.bin 首先需要安装一些必要的软件包 sudo apt-get install device-tree-compiler openssl-devel libncurses5-dev libncursesw5-dev u-boot-tools 一、uboot编译 第一步:下载uboot源代码,( https://github.com/Xilinx/u-boot-xlnx/releases/tag/xilinx-v2016.3 ) 我已经上传百度云盘( https://pan.baidu.com/s/1dE4jOm1 ) 第二步:su 进入超级权限 sudo tar -zxvf xilinx-v2016.3.tar.gz cd u-boot-xlnx-xilinx-v2016.3/tools/ export PATH= pwd :$PATH 第三步:返回u-boot-xlnx-xilinx-v2016

GCC编译过程与动态链接库和静态链接库

本小妞迷上赌 提交于 2019-12-24 12:09:04
1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码。 现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常 。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 库有两种:静态库( .a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so 在这里先介绍下Linux下的gcc编译的几个选项 g++ -c hellospeak.cpp 会将hellospeak.cpp 选项 -c 用来告诉编译器编译源代码但不要执行链接,输出结果为对象文件。文件默认名与源码文件名相同,只是将其后缀变为 .o。例如,上面的命令将编译源码文件hellospeak.cpp 并生成对象文件 hellospeak.o; 下面这条命令将上述两个源码文件编译链接成一个单一的可执行程序: $ g++ hellospeak.cpp speak.cpp -o hellospeak 如果没有-o和后面的参数,编译器采用默认的 a.out 本例中就会生成hellospeak 这样的可执行程序。 所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤: 图:编译过程 静态库 之所以成为【静态库】, 是因为在链接阶段,会将汇编生成的目标文件 .o与引用到的库一起链接打包到可执行文件中

GCC 参数详解

不打扰是莪最后的温柔 提交于 2019-12-24 10:53:30
From http://www.cppblog.com/SEMAN/archive/2005/11/30/1440.html [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] 3.汇编变为目标代码(机器代码),生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] [参数详解] -x language filename   设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后 缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀 名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了 下一个参数的使用。   可以使用的参数吗有下面的这些   `c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `a ssembler-with-cpp'.   看到英文,应该可以理解的。   例子用法:   gcc -x c hello.pig    -x none filename   关掉上一个选项

gcc常用编译选项

☆樱花仙子☆ 提交于 2019-12-24 07:02:18
“-Wall”选项打开所有最常用到的编译警告,强烈建议打开,可以捕捉到许多在C编程中最常发生的错误。 “-o”选项来为可执行文件指定一个不同的输出文件。 “-c”用于把源码文件编译成对象文件。 对象文件包含的是机器码,其中任何对在其他文件中的函数(或变量)的内存地址的引用都留着没有被解析。这样就允许在互相之间不直接引用的情况下编译各个源代码文件。链接器在生成可执行文件时会填写这些还缺少的地址,然后把所有的对象文件组合在一起生成单个的可执行文件。当用“-c”来编译时,编译器会自动生成与源文件同名,但用“.o”来代替原来的扩展名的对象文件。 gcc使用链接器ld来施行链接,它是一个单独的程序。在GNU系统上用到的是GNU的链接器,即GNU ld。 通常,链接要快于编译----在一个有许多源文件的大型项目中,只重新编译那些被修改过的文件可以显著地节省时间。仅仅重编译项目中修改过的文件的过程可以用GNU Make来自动完成。 标准的系统库通常能在“/usr/lib”和“/lib”目录下,C标准库自身存放在“/usr/lib/libc.a”中,包含ANSI/ISO C标准指定的各个函数。其他库都需要显示或隐示指定。 “-lNAME”试图链接标准库目录下的文件名为“libNAME.a”中的对象文件。在大型程序中通常会用到很多“-l”选项,来链接象数学库,图形库和网络库。使用选项“-lNAME

CMAKE的使用

拜拜、爱过 提交于 2019-12-24 02:53:15
一、 基本使用 安装:下载二进制包后可直接解压使用 从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败 使用:cmake dir_path,生成工程文件或makefile文件 二、 概念 out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录; 2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录 3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验) 四、 语法 1. #注释 2. 变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值; 3. command (args ...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格 4. set(var a;b;c) <=> set(var a b c) #定义变量var并赋值为a;b;c这样一个string list 5. Add_executable(${var}) <=> Add_executable

gcc 生成 .a静态库和 .so动态库

只愿长相守 提交于 2019-12-24 01:05:46
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两 种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态 库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运 行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以 及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 第1步:编辑得到举例的程序--hello.h、hello.c和main.c; hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出" Hello XXX!"。hello.h(见程序1)为该函数库的头文件。main.c(见程序3)为测试库文件的 主程序,在主程序中调用了公用函数hello。 程序1: hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name); #endif //HELLO_H 程序2: hello.c #include <stdio.h> void hello(const char *name) { printf("Hello %s!\n", name); } 程序3: main.c #include "hello.h" int main