Cygwin是在windows系统下安装和使用Linux工具的绝佳方式。当然windows系统现在也可以安装原生态的Ubuntu,不过它与windows是隔离的。Cygwin的最大优势是可以同时用linux和windows的命令行工具,只要设置好环境变量即可。所以通过Cygwin可以享受命令行方式带来的尽情操纵数据的自由感。
环境变量设置
vi ~/.bashrc
与网络有关的linux命令
wget: 下载
axel:多线程下载工具
curl: 模拟http请求
ftp:
sftp:ssh ftp
scp: scp localfile user@ip:~/remotedirectory # ssh copy
与进程有关的linux命令
&: 后台
nohup:服务器后台,需用exit推出本地终端; no hangup
CTRL+Z and fg: 挂起和恢复
jobs:
top: 监控进程
tail -f: 监控文本文件改变
文本处理的linux命令
vi:
grep:
awk:
sed:
编译和安装
gcc工具链:gcc/g++在执行编译工作的时候,总共需要4步
- 预处理:处理源码中的预处理语句,生成.i的文件[预处理器cpp]
- 编译:将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs]
- 汇编:把汇编变为目标代码(机器代码),生成.o的文件[汇编器as]
- 链接:链接目标代码,生成可执行程序[链接器ld]
./configure -prefix=/yourpath # 来生成 Makefile
make # 从Makefile中读取指令,然后编译; 重新编译时,仅仅编译修改过的源文件;若编译所有文件,用-B参数
make install # 从Makefile中读取指令,安装到指定的位置
make clean
make uninstall
两种动态库:static和shared
export LIBRARY_PATH=$LIBRARY_PATH:/lippath # 静态链接库 static,以.a为后缀
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/libpath # 动态链接库 shared,以.so为后缀
它们用途不同: 在于编译时加载,还是运行时加载
编译时,动态库的搜索路径顺序如下(不会递归其子目录):
- gcc编译、链接命令中的-L选项;
- 环境变量的LIBRARY_PATH;
- gcc默认动态库目录:/lib:/usr/lib:usr/lib64:/usr/local/lib等
运行程序时,加载动态库文件路径顺序:
- 编译目标代码时指定的动态库搜索路径:用选项-Wl,rpath和include指定的动态库的搜索路径,
gcc -Wl,-rpath,include -L. -ldltest hello.c,在执行文件时会搜索路径./include
; - 环境变量LD_LIBRARY_PATH;
- 在/etc/ld.so.conf.d/ 目录下的配置文件指定的动态库绝对路径(通过ldconfig生效,一般是非root用户时使用);
- gcc默认动态库目录:/lib:/usr/lib:usr/lib64:/usr/local/lib等;
- 编译目标代码时指定的动态库搜索路径:用选项-Wl,rpath和include指定的动态库的搜索路径,
可以通过pkg-config检测所依赖的动态库是否存在
也可以通过ld –verbose查看动态库目录
共享动态库有不同版本时,可以用符号连接方式: ln -s libhello.so.1 libhello.so
编译和安装时的常见问题
./configure时:/usr/lib/gcc/x86_64-pc-cygwin/5.3.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lpng
collect2: error: ld returned 1 exit status
判断某个lib是否存在: $ cygcheck -l libpng16-devel |grep png.h
可以修改在configure中修改lib,添加/usr/include/libpng16,不过最好是设置好动态库,以永久解决问题。
Cygwin下某些编译错误可以由于静态加载引起,此时gcc -static为静态加载方式,可以把static删除