网络配置
====================
1. 如果动态ip或者静态ip都无法上网(单词没有写错,ip地址写错,桥接和NAT不要搞错)
桥接: ubuntu会单独由路由器分配ip,不和window共享ip
NAT: ubuntu跟主机共享ip
2. 跟linux基础有关的岗位
研发《--- 技术支持,技术维护 《-- 技术类销售
服务器管理
系统运维 --》精通linux
linux基础
===================
(1) 在线下载,更新软件源,卸载软件
前提条件:ubuntu必须能够上网
在线下载: sudo apt-get install 软件程序的名字
更新软件源:第一个我们可以选择不同的ubuntu软件服务器
第二个我们可以更新下载源
sudo apt-get update
卸载软件:
sudo apt-get remove 软件程序的名字
问题一: 卸载软件出现
Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
解决方法:用超级用户删除 /var/lib/dpkg/lock这个锁
小实验: 卸载vim,重新安装vim
which vim --》路径
ls -l vim --》软链接 --》真实的名字vim.gtk
(2) ps top命令(系统编程的时候)
查看当前系统中进程的运行状态
ps -elf
动态查看进程的状态信息
top
(3) 重定向和追加重定向
重定向:重新确定方向 > 会覆盖原来的内容
ls > 1.txt //把ls的输出重定向到1.txt
echo "hello" > 2.txt
追加重定向: >> 在末尾追加,不会覆盖文件中原本的内容
(4) 查看文件大小
du 文件名 -b
目录的大小:它里面所有文件和文件夹大小的总和
ls -l 查看普通文件大小是正确的,但是目录就不对(全部都是4096字节)
(5) 目录树(树状图打印整个目录的层次结构)
tree 目录名
(6) 比较文件或者目录
diff 1.c 2.c -s //比较两个文件,内容一样就打印提示
动态库和静态库
===============
头文件: 函数的声明,函数的源码不在头文件中
库文件: 把函数的源码编译成二进制的库文件,库文件就是用来存放函数源码的
linux中库文件有两种类型: 动态库和静态库
(1)动态库
linux规定动态库名字 libxxxx.so //.so结尾
步骤:
第一步: 把.c文件编译成.o文件
gcc hello.c -o hello.o -c
第二步: 把.o文件编译生成动态库文件
gcc -shared -fPIC hello.o -o libhello.so // -shared -fPIC 编译动态
库需要用到的编译选项
注意: hello.c中不能有main函数
(2) 使用动态库
写法一:
gcc main.c libhello.so -o main
写法二:
gcc main.c -o main -L动态库的路径名 -l动态库的名字
动态库的名字: 去掉lib,去掉.so,剩余的就是
gcc main.c -o main -L/mnt/hgfs/share -lhello
运行出现问题:
error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory
动态库的特点:
如果你的程序采用动态库编译,那么程序运行的时候需要加载动态库文件中的源码(默认去系统中存放库文件的环境变量 /lib 中查找)
解决方法:
方法一:把我自己编译的动态库拷贝一份到系统的环境变量中 /lib
方法二:我自己设置动态库的环境变量
export LD_LIBRARY_PATH=/你的路径: $LD_LIBRARY_PATH //一次性,关闭窗口,下次重新设置
(3) 遇到的问题
部分同学编译动态提示 -fPIC有问题
解决方法: gcc hello.c -o hello.o -c -fPIC
gcc -shared hello.o -o libhello.so
(4) 静态库(libxxxx.a)
步骤:
第一步: gcc hello.c -o hello.o -c //生成.o文件
第二步:.o文件编译生成静态库
ar -rcv libhello.a hello.o //注意书写格式
使用静态库
写法一: gcc main.c libadd.a -o main
写法二: gcc main.c -o main -L静态库路径 -l静态库的名字
特点: 你使用静态库编译,静态库中的源码会被一起编译到程序中,运行程序的时候不需要依赖静态库
(5) 对比动态库和静态库
动态库编译的程序占用的存储空间要比静态库编译的小
如果动态库和静态库放在一起,编译器优先使用谁??
优先使用动态库编译
库文件好处: 方便代码升级,隐藏函数实现的细节
练习:
1. 自己动手熟悉刚才的动态库编译过程,体会动态库的特点,思考如何让动态库的配置永久生效
(/etc/bash.bashrc) 答案: 把export设置语句写在这个文件的末尾
Makefile(课程大纲要求是比较低)
============
1. 实际开发,复杂的Makefile都是用软件工具自动生成,autotool工具
2. Makefile书写
总的原则
目标:依赖
为了达成目标需要做的事情
伪目标:没有任何依赖的目标,就是伪目标
比如: clean:
语法格式要求:
Makefile名字固定的,没有后缀名
语句必须用tab缩进,不能用空格代替
单行注释采用#
常见的问题:
问题一:
make: 'main' is up to date. //原因上一次make已经编译过该程序,再次make时候,由于代码没有做任何修改,就提示这个
解决方法: 删除程序重新编译
作用:自动编译,自动管理你的工程项目