EDA365电子论坛网

标题: linux知识积累 [打印本页]

作者: pulbieup    时间: 2020-5-9 10:13
标题: linux知识积累
一、vim知识
f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
D 删除当前字符至行尾。D=d$
:split或new 打开一个新窗口,光标停在顶层的窗口上
:split file或:new file 用新窗口打开文件

/ ~/ s% K( V. x
二、如何替换搜索第二个match的字符
sed –i ‘s/xxx/yyy/2’file

6 q1 O" l5 s/ G2 p7 y) s
三、gcc的知识
选项-c
用法:#gcc-c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
2 ^" \# n1 p7 `) I  t1 `" \! y
无选项链接
用法:#gcctest.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。

4 K5 n, X  s3 N0 H/ \
分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc-c testfun.c //将testfun.c编译成testfun.o
#gcc-c test.c //将test.c编译成test.o
#gcc-o testfun.o test.o -o test //将testfun.o和test.o链接成test

6 }- L7 a) [. v! k6 U
头文件
gcc在编译时怎么去寻找所需要的头文件: ' ?) \$ F6 p7 ?, U, P
※所以headerfile的搜寻会从-I开始 % Q' J9 P( u) w; B- P
※然后找gcc的环境变量C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
  S; ?" Y$ p2 j& ]& T' Q7 v# F1 o1 r※再找内定目录 # g& N1 n, S0 q2 P4 y) G, S' E
/usr/include
0 ]* M9 E4 A! m6 N0 w/usr/local/include
* S/ K1 b# G: }, V) w% A; S4 F/usr/lib/gcc-lib/i386-linux/2.95.2/include
; }( H* X2 p1 h8 x0 v6 c/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3 % y! o" E9 ^0 X; f) j. Q
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include

, v: F4 g. D* H4 M3 z
库文件 ) w1 _* I. W5 x8 i
编译的时候:
# O- R! G; T* B2 [% T6 Z※gcc会去找-L % k. W& G6 v) r* k. ]& N  z+ p
※再找gcc的环境变量LIBRARY_PATH % m! n4 k& e6 U  e
※再找内定目录/lib/usr/lib /usr/local/lib这是当初compilegcc时写在程式内的

  f4 f( u# s( D0 c3 m: n
-Dmacro
. b* q7 U3 f' O- u! _相当于C语言中的#definemacro 2 V5 r2 [5 }. D" p9 Y: r
-Dmacro=defn , d7 h" J5 ^+ Q
相当于C语言中的#definemacro=defn 7 Q/ T; ~6 x$ ~
-Umacro - H/ G5 A- R2 Y. K2 H( f5 Y
相当于C语言中的#undefmacro 2 [% j6 L) h6 H# M5 K
-undef / W! z: ^0 z% b- i0 I' R$ F9 M- g
取消对任何非标准宏的定义
-Idir * o& C: {3 X3 }4 i( [4 z7 c5 j
在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如
( `0 S! t. A3 y1 N4 M7 [! V$ {& o果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他 , H2 D4 }3 A1 k/ }
回先在你所制定的目录查找,然后再按常规的顺序去找.
* h5 |' J+ b4 A对于#include<file>,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺 $ l- R9 h( i% b9 W& t$ B  f: n
省的头文件目录查找
6 K; D: w7 h7 r% x+ g9 |  @-I- 8 b( r6 h7 j$ [
就是取消前一个参数的功能,所以一般在-Idir之后使用
-g
1 T" m( U9 c0 K: N) P/ j& [$ }只是编译器,在编译的时候,产生调试信息。
-static ! V" u7 I* Y" c
此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么 5 _- ~5 O. Z8 Q: c
动态连接库,就可以运行.
-share " l% C; i; R$ ~2 v/ N# ^8 r
此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-w不生成任何警告信息。 0 v. ]5 s! i4 w
-Wall生成所有警告信息。
无论静态库,还是动态库,都是由.o文件创建的。
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为myhello,则静态库文件名就是libmyhello.a。在创建和使用静态库时,需要注意这点。创建静态库用ar命令。
       在系统提示符下键入以下命令将创建静态库文件libmyhello.a。
#ar cr libmyhello.a hello.o
#gcc -o hello main.c -L. –lmyhello
3 C9 L8 d3 \+ `7 @
动态库文件名命名规范和静态库文件名命名规范类似,也是在动态库名增加前缀lib,但其文件扩展名为.so。例如:我们将创建的动态库名为myhello,则动态库文件名就是libmyhello.so。用gcc来创建动态库。
在系统提示符下键入以下命令得到动态库文件libmyhello.so。
#gcc -shared -fPCI -o libmyhello.so hello.o

; D) e+ i' D' a
作者: CCxiaom    时间: 2020-5-9 13:20
linux知识积累




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2