环境变量:
1.放在/home(~/.bashrc)下的环境变量配置文件,只会对当前用户起作用;在/etc(/etc/profile)下的环境变量所有的用户都起作用
2.命令显示当前系统定义的所有环境变量:env
3.输出当前的PATH环境变量的值:echo $PATH
4.新添加环境变量:export PATH=/home/uusama/mysql/bin:$PATH ($PATH代表原来的环境配置)
5.在终端输入export只会在当前窗口生效,关闭终端后就失效了;在.bashrc中export,每次打开终端都会重新加载一遍。
普通复制:(cp改成mv即移动)
cp -r /home/yzy/a.txt /home/yzy/sdk,可以复制文件or目录,得到一个新文件or目录,与源文件无关,互不干扰。
scp远程传输:
本地拷到远程 scp /home/test/a.cc 10.71.233.85:/home/yzy
远程拷到本地 scp -r root@10.71.233.85:/home/yzy/test /home/test3
网络问题:
1.ip addr 查本机ip是否正确,10开头证明是公司内网
2.route 查本机网关是否配置正确,可ping通
3.去另外一台正常上网的机器,ping proxy.huawei.com,得到域名的ip地址,在原机器用ip地址替换掉proxy.huawei.com,可以正常访问外网了
分析:主机的内网都是正常的,访问外网出问题,应该是dns(域名解析)出问题了,因此可以跳过dns,直接写ip地址;也可以修改dns让它正常解析
硬连接: ln src dst
只能链接文件,生成一份新的文件;修改源文件or新文件,两者都会跟着改变,删除源文件对新文件没有影响,常用于重要文件备份。
软连接: ln -s src dst
可以链接文件和目录,生成一个类似于"快捷文件"的文件,可以通过此文件访问源文件路径;删除源文件的话该文件链接会失效。
编译静态库/动态库(gcc)
静态格式:win .lib,linux .a 动态格式:win .dll,linux .so
静态链接库:在编译时就把需要链接的库打包好。
优点:易于移植;
缺点:浪费空间,每编译一个都要打包所有库,另外链接库更新时,所有链接都得重新编译更新。
动态链接库:在运行时才指向需要链接的库。
优点:节省空间,内存共享复用,当运行的时候,内存中加载过的库不用重复加载;
缺点:因为在运行时要寻找链接的库,所以耗时会比静态链接慢
制作静态库:
gcc test.c -c -I../include(生成.o目标文件)
ar rcs libtest.a test.o(把.o文件打包为静态库.a)
mv libtest.a ../lib(将静态库文件放置lib文件夹下)
制作动态库:
gcc -fPIC test.c -I ../include -c(生成.o文件,参数-fPIC表示生成与位置无关代码)
gcc -shared -o libtest.so test.o(把.o文件打包为动态库.so,参数:-shared 制作动态库 -o:重命名生成的新文件)
mv libMyTest.so ../lib(将动态库文件放置lib文件夹下)
gcc编译步骤:
整个编译分为四个步骤:
1.预编译:把代码文件进行预编译成main.i文件,预编译过程中去掉注释、进行宏替换、增加行号信息等;
2.编译:将main.i文件经过语法分析、代码优化和汇总符号等步骤后,编译形成main.S的汇编文件,里面存放的都是汇编代码;
3.汇编:进行汇编,从main.S变成二进制可重定位目标文件main.o;
4.链接:把需要引用到的库文件进行链接,生成可执行文件。
gcc -E main.c -o main.i #预编译,生成main.i文件
gcc -S main.i #编译,生成main.S文件(汇编代码)
gcc -c main.S #汇编,生成main.o文件 (目标文件)
gcc main.o -o main #链接,生成可执行文件
-L(大写l)参数就是用来指定程序要链接的库,-l(小写l)参数紧接着就是库名(lib的搜索路径顺序:指定路径->/lib、/usr/lib、/usr/local/lib)
1.放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,比如:-ltest
2.放在其他目录的,比如我们把libtest.so放在/aaa/bbb/ccc目录下,那就要指定路径:-L/aaa/bbb/ccc -ltest
同理,-L(大写l)指定搜索路径,-l(小写l)指定要引入的头文件:gcc test.c -L /path/to/sparcLib -I /path/to/sparcInclude