读《程序员的自我修养》用过的指令记录和笔记

本文详细介绍了C/C++编译过程中预处理、编译、汇编和链接四个阶段,通过具体示例展示了gcc、objdump、objcopy等工具的应用,覆盖了从源代码到目标文件的全过程,包括对象文件的格式解析、链接过程的细节以及静态和动态库的创建与使用。此外,文章还涉及了如何通过不同参数和选项来优化编译过程和构建过程,以及如何利用这些工具进行代码分析和调试。

1、流行的集成开发环境(IDE),比如Visual Studio等,一般是将编译和链接的过程一步完成,合并在一起的过程称为构建(build)。

2、GCC编译过程:预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。


#chapter 3

  gcc -c SimpleSection.c

 

 #p62

  objdump -h SimpleSection.o

 #p64,p65

  objdump -s -d SimpleSection.o

  objdump -x -s -d SimpleSection.o

 

 #p68

  objcopy -I binary -O elf32-i386 -B i386image.jpg image.o

  objdump -ht image.o

 

 #p63

  size SimpleSection.o

 

 #p69, p84

  readelf -h SimpleSection.o

  readelf -s SimpleSection.o

 

 #p82

  nm SimpleSection.o

 

#chapter 4

 #p101

  ld a.o b.o -e main-o ab

 

 #p107

  objdump -r a.o

 

 #p119

  ar -t libc.a

 #p120

  gcc -c -fno-builtin hello.c

  ar -x libc.a

  ld hello.o printf.o

 #p121

  gcc -static --verbose-fno-builtin hello.c

 

 #p125

  gcc -c -fno-builtin TinyHelloWorld.c

  ld -static -e nomain-o TinyHelloWorld TinyHelloWorld.o

 #p126

  ./TinyHelloWorld

  echo $?

 #p128

  gcc -c -fno-builtin TinyhelloWorld.c

  ld -static -T TinyHelloWorld.lds -oTinyhelloWorld TinyHelloWorld.o

 

 #p132

  gcc -o target target.c -lbfd

  ./target

 

#chapter 5

 #p135, p136

  cl /c /ZaSimpleSection.c

  dumpbin /AllSimpleSection.obj > SimpleSection.txt

  dumpbin SimpleSection.obj /SUMMARY

 

#chapter 6

 #p162

  gcc -static Sectionmapping.c -oSectionMapping.elf

 

 #p162, p163

  readelf -S SectionMapping.elf

  readelf -l SectionMapping.elf

 

 #p166

  ./SectionMapping.elf &

  cat /proc/21963/maps

 

 #p168

  ./maxMalloc

 

 #p173

  ./minbash

 

#chapter 7

 #p185

  gcc -fPIC-shared -o Lib.so Lib.c

  gcc -o Program1 Program1.c ./Lib.so

  gcc -o Program2 Program2.c ./Lib.so

 

 #p187

  ./Program1

  cat /proc/3334/maps

  kill 3334

 

 #p191

  gcc -shared -fPIC -o pic pic.c

  objdump -d pic.so

  #p195

  objdump -h pic.so

  objdump -R pic.so

 

 #p197

  readelf -d foo.so | grepTEXTREL        ::text relocation

 

 #p197

  gcc -shared -o module.so module.c

  gcc -shared -fPIC -o module.so module.c

 

  #p204

  readelf -l Program1 | grep ???????

 

  #p205,p206

  readelf -d Lib.so

  ldd Program1

  #p207

  readelf -sDLib.so

  readelf -s Lib.so

  #p208

  readelf -r Lib.so

  readelf -S Lib.so

 

  #p213

  gcc auxVec.c -o auxVec

  ./auxVec testAuxVec >auxVec.txt

 

 #p216

  gcc -fPIC -shared a1.c -o a1.so

  gcc -fPIC -shared a2.c -o a2.so

  gcc -fPIC -shared b1.c a1.so -o b1.so

  gcc -fPIC -shared b2.c a2.so -o b2.so

 #p217

  gcc main.c b1.so b2.so -o main -Xlinker -rpath ./

  ./main &

  cat /proc/18117/maps

  kill 18117

 

 #p219

  /lib/ld-linux.so.2

 

 #p221

  ldd /lib/ld-linux.so.2

 

  #p224

  objdump -t

  objdump -T

 

  #p225-226

  gcc -o RunSoSimple RunSoSimple.c -ldl

  ./RunSoSimple/lib/i386-linux-gnu/libm-2.19.so

 

  readelf -s /lib/i386-linux-gnu/libm-2.19.so | grep sin

 

  #p226

  gcc RunSo.c -o RunSo -ldl

  ./RunSo /lib/i386-linux-gnu/libm-2.19.so sind2.0 d

 

  gcc RunSo.c -o RunSo -ldl -gstabs

  gdb -q RunSo

  (gdb) disassemble _start

  (gdb) disassemble main

  (gdb) break main

  (gdb) run 1 2 3

  (gdb) disassembly main

  (gdb) step

  (gdb) next

  (gdb) quit

 

Chapter 8

  #p234

  ls -l /lib/i386-linux-gnu/lib*

 

  #p242

  ldconfig -p

 

  #p243

  LD_LIBRARY_PATH=/home/user/bin/ls

  /lib/ld-linux.so.2-library-path /home/user /bin/ls

 

  #p244

  LD_DEBUG=files ./HelloWorld.out

  LD_DEBUG=help ./HelloWorld.out

 (files,bindings,libs,versions,reloc,symbols,statistics,all,help)

 

  #p245

  gcc -shared (-fPIC) -Wl,-soname,my_soname-o library_name source_files library_files

 

  gcc -shared -fPIC -Wl,-soname,libfoo.so.1 -olibfoo.so.1.0.0 libfoo1.c libfoo2.c-lbar1-lbar2

 

  ==>

  gcc -c -g -Wall-o libfoo1.o libfoo1.c

  gcc -c -g -Wall -o libfoo2.o libfoo2.c

  ld -shared -soname libfoo.so.1 -o libfoo.so.1.0.0 libfoo1.olibfoo2.o-lbar1-lbar2

 

  #p246

  ld -rpath/home/mylib -export-dynamic -o program.outprogram.o -lsomelib

  gcc -Wl,-rpath/home/mylib -Wl,-export-dynamic -o program.outprogram.o -lsomelib

 

  #p246

  strip libfoo.so

 

  #p247

  ldconfig -nshared_library_directory

 

Chapter 9

  #p252

  cl /LDd Math.c

 

 #p253

  dumpbin /EXPORTSMath.dll

 

  cl /c TestMath.c

  link TestMath.obj Math.lib

 

  #p260

  link math.obj /DLL/EXPORT:_Add

 

  dumpbin /DIRECTIVESmath.obj

 

  #p262

  dumpbin /IMPORTSMath.dll

 

  #p269

  link /BASE:0x10010000,0x1000 /DlL bar.obj

  editbin /REBASE:BASE=0x10020000 bar.dll

 

  #p270

  cl /c Math.c

  link /DLL /DEF:Math.edfMath.obj

 

  #p271

  editbin /BINDTestMath.exe

  dumpbin /IMPORTSTestMath.exe

 

Chapter 10

  #p289

  cl foo.c /Zi

  dumpbin foo.exe /DISASM> foo.txt

 

  cl foo.c /Zi /Od

  dumpbin foo.exe /DISASM> foo.txt

 

本文:http://blog.youkuaiyun.com/rayluoluo4/article/details/39718663

 

内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值