gcc/gdb/Makefile
文章平均质量分 96
luckywang1103
每天多一点思考
展开
-
链接脚本
void foo(void) attribute((section(".in_name")));void bar(void) attribute((section(".in_name")));.out_name{*(.in_name)}这样就把foor(), bar()这两个函数给放在了最终elf文件里的.out_name这个section。从宏观上来看下这个链接脚本SECTI...原创 2020-01-21 18:02:58 · 310 阅读 · 0 评论 -
linux应用程序调试gdb+gdbserver
rlx平台在目标板子上gdbserver ip:port /bin/xxx 在pc上xxxx/xxx-linux-gdb /bin/xxx,进入gdb后target remote ip:port开始进行gdb调试如果发现出现no debugging symbols found的时候,需要在编译的地方加-g选项,并且make menuconfig中按照如下设置, [*] Enable debug原创 2016-07-08 11:39:28 · 1746 阅读 · 0 评论 -
内存泄漏检查等相关工具
MEMWATCH下载地址: memwatch MEMWATCH 支持ANSIC,它提供结果日志纪录,能检测双重释放(double-free)、错误释放(erroneous free)、没有释放的内存(unfreedmemory)、溢出和下溢等等。#include <stdlib.h>#include <stdio.h>#include "memwatch.h"int main(void){原创 2016-04-30 19:21:08 · 655 阅读 · 0 评论 -
linux内核调试gdb + KGDB
Linux内核开发者使用最普遍的调试方法是printk方法,但是这种方法每次添加一些调试信息后还要重新编译烧写,效率不高,Kgdb调试方法是一种源码级的Linux内核调试器。使用Kgdb调试内核时,需要结合gdb一起使用,使用他们可以对内核进行单步调试,设置断点,观察变量、寄存器的值等。使用kgdb调试需要两台机器,即主机和目标机(一般为开发板),主机上使用gdb通过串口或者网络来调试目标机,目标机原创 2017-03-24 09:01:49 · 6573 阅读 · 9 评论 -
gcc内嵌汇编
gcc基本的内联汇编基本的内联汇编格式是__asm__ __volatile__("Instruction List");_asm_ __asm__是gcc关键字asm的宏定义,用来申明一个内联汇编表达式_volatile_ 如果用了它,则是向GCC 声明不允许对该内联汇编优化,否则当 使用了优化选项(-O)进行编译时,GCC 将会根据自己的判断决定是否将这个内联汇编表达式中的指令优化掉。 In原创 2016-11-03 17:19:01 · 1006 阅读 · 0 评论 -
Makefile中变量读取与生效时间
现在我在A Makefile中include B Makefile,在B Makefile中有变量OBJS和VPATH的赋值 来看看B Makefile (libmad/Makefile)VPATH += $(ROOT_DIR)/libmadOBJS += version.o fixed.o bit.o timer.o stream.o frame.o synth.o decoder.o原创 2018-01-19 17:45:05 · 1118 阅读 · 0 评论 -
Makefile实现子目录编译
在父目录的Makefile中export出变量,比如export CFLAGS在父目录的Makefile中make -C child_dir 就能去寻找子目录中的Makefile并进行编译make -j4的时候向子Makefile编译的时候出现问题 make[1]: warning: jobserver unavailable: using -j1. Add `+’ to parent m...原创 2018-06-14 15:21:36 · 2787 阅读 · 0 评论 -
gdb
调试带参数程序gdb xxx进入调试界面后 set args 可指定运行时参数 (如set args -l) show args 可查看设置好的运行参数 path &amp;amp;lt;dir&amp;amp;gt; 可设定程序的运行路径 show paths 查看程序的运行路径 set env varname [=value] 设置环境变量 show env 查看环境变量...原创 2018-08-22 09:35:25 · 485 阅读 · 0 评论 -
./configure指定编译参数
一种方法是在./configure后指定编译相关的参数./configure --host=aarch64-poky-linux另一种方法是使用环境变量中的编译相关的参数,这时需要修改configure文件# cross_compiling=nocross_compiling=yes然后执行source /opt/poky/2.0.1/environment-setup-aarc...原创 2018-08-21 15:35:09 · 7813 阅读 · 0 评论 -
编译器barrier/CPU memory barrier
内存访问乱序主要是为了提升程序运行时的性能,内存乱序访问主要在两个地方: 1. 编译时,编译器优化导致内存乱序访问(指令重排) 2. 运行时,多cpu间交互引起内存乱序访问编译时内存乱序访问// test.cppint x, y, r;void f(){ x = r; y = 1;}首先编译此源文件,g++ -S test.cpp 得到汇编代码如下:movl r(原创 2016-05-03 13:59:51 · 1914 阅读 · 0 评论 -
Kbuild
Kbuild实现Kbuild分析Kbuild语法参考内核目录下文档Documentation/kbuild/kconfig-language.txt 基本由以下这些构成: menu/endmenu menuconfig config choice/endchoice source if/endif commentmenu/endmenumenu与endmenu必须同时出现。menu和原创 2016-02-16 16:08:34 · 7399 阅读 · 0 评论 -
cmake
cmake内部变量CMAKE_C_COMPILE 指定c编译器CMAKE_CXX_COMPILERCMAKE_C_FLAGS 编译c文件时的选项,如-g,也可以通过add_definitions添加编译选项EXECUTABLE_OUTPUT_PATH 可执行文件的存放路径LIBRARY_OUTPUT_PATH 库文件路径CMAKE_BUILD_TYPE buil原创 2016-02-15 17:01:27 · 1239 阅读 · 0 评论 -
autotools实现makefile的自动生成
途中遇到很多问题,等已有有空了统一整理一下autotools的使用1、转载 2014-09-01 21:43:58 · 932 阅读 · 0 评论 -
linux下应用程序生成core dump文件
linux下的c程序常常会因为内存访问错误等原因造成segment fault,此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上,之后可以用gdb对core文件进行分析,查看系统发生segment fault时刻的情况。 使用ulimit -a可以查看系统core文件的大小限制 使用ulimit -c[kbytes]可以设置系统允许生成的core文件大小 例如: u转载 2015-05-21 08:56:32 · 3353 阅读 · 0 评论 -
Kconfig、Kbuild Makefile
1. 基本构成 基本构成包括五种,menu/endmenu,menuconfig,config,choice/endchoice,source。下面就对每种详细介绍:(1) menu/endmenumenu的作用,可以理解成一个目录,menu可以把其中一部分配置项包含到一个menu中,这样有利于配置的分类显示。menu与endmenu是一组指令,必须同时转载 2014-06-17 17:45:26 · 6603 阅读 · 0 评论 -
单目录单个Makefile、多目录单个Makefile、多目录多个Makefile
1、单目录单个MakefileMakefilemain.cfun.cfun.h/* fun.h */void fun();/* fun.c */#include void fun(){ printf("fun!!!\n");}/* main.c */#include "fun.h"int main(){ fun(); return 0;}/* M原创 2014-12-21 18:35:13 · 7267 阅读 · 0 评论 -
预定义宏
ASIC标准__LINE__ 源代码行号 __FILE__ 源文件名 __DATE__ 编译日期 __TIME__ 编译时间 __STDC__ 当要求程序严格遵循ASIC C标准时该标志被赋值1 __cplusplus 当编写c++程序时该标志符被定义gcc标准__FILE__ __LINE__ __FUNCTION__ __BASE_FILE__ 标志主输入文件转载 2015-07-03 20:20:41 · 788 阅读 · 0 评论 -
cmake
内部变量CMAKE_C_COMPILE 指定c编译器CMAKE_CXX_COMPILERCMAKE_C_FLAGS 编译c文件时的选项,如-g,也可以通过add_definitions添加编译选项EXECUTABLE_OUTPUT_PATH 可执行文件的存放路径LIBRARY_OUTPUT_PATH 库文件路径CMAKE_BUILD_TYPE build类型(D转载 2015-11-15 20:36:19 · 207 阅读 · 0 评论 -
gcc
gcc生成静态链接库gcc -c file1.c gcc -c file2.c ar crv my_library.a file1.o file2.o 注意,用gcc链接静态库的时候,-l要放在xxx.c后面 -I -l -L 系统头文件路径是:/usr/include,如果引用的头文件不在系统路径下,那么需要用-Ipath来指明头文件的目录。 静态链接库的系统路径是:/lib, ...原创 2016-01-04 20:59:44 · 936 阅读 · 0 评论 -
Makefile中= := ?= +=区别
= 是最基本的赋值:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值之前一直纠结makefile中“=”和“:=”的区别到底有什么区别,因为给变量赋值时,两个符号都在使用。网上搜了一下,有人给出了解答,但是本人愚钝,看不懂什么意思。几寻无果之下,也就放下了。今天看一篇博客,无意中发现作者对于这个问题做了很好的解答。解决问题之余不免感叹,有时候给个转载 2014-12-19 17:53:28 · 708 阅读 · 0 评论