linux中的动静链接库
生成静态库:
假如有文件 main.c、1.c、2.c 将1.c和2.c生成一个静态库的方法为,编写Makefile:
mylib.a:1.c 2.c
$(CC) -c $< # $<表示所有最新的依赖项,若没有旧的则是全部依赖项
ar crv libmy.a 1.o 2.o # 1.o 2.o为1.c和2.c生成的object文件
静态库的链接:
gcc -o myapp main.o -L./ -lmy # myapp为要生成的应用程序
-L 后跟的是自定义的库所在的位置,如果是系统库则不需要 -lmy中my是库文件名的后半部,也即库名,库文件名的命名规则为libNAME.a ,NAME为库名 如果链接多个库则用多个"-lNAME"参数。
动态库的生成:
gcc -shared -o libNAME.so 1.c 2.c #gcc会直接把1.c 2.c编译成object文件并合成名为
libNAME.so的动态库。
动态库的使用跟静态库一样,区别是静态库将代码加到了应用程序中,以后不再需要静态库,而动态库只是一个链接,应用程序每次运行都需要加载动态库。注意,在应用程序运行时没出现找不到库的问题,因为链接时是在系统库目录中(/usr/lib /usr/local/lib)查找库。所以需将自定义的动态库复制到系统库目录中,或使链接时能找到这个库。
相关文档:
在阅读Nginx的代码.先碰到的是线程部分的
因为从main开始最早是做线程部分的工作
实习一下pthread方面的内容
#include "pthread.h"
#include "stdio.h"
void* thread_test(void* ptr)
{
while(1)
printf("i am child pthread\n");
}
int ma ......
近日在centos下用c写东西,这个程序的服务端运行在64位的centos下,客户端有可能是32机,也有可能是64位的。
为了保证数据传输的一致性制定了一套协议,用struct实现。为了保证输出过程中,数据的完整性,特别针对系统的不同对struct里变量的类型进行了优化。为了保证内存对齐方式的一致和数据存储空间的紧凑,都用 #pragm ......
Linux常用的头文件集合:
<dirent.h> 目录项
<fcntl.h> 文件控制
<fnmatch.h> 文件名匹配类型
<glob.h> 路径名模式匹配类型
<grp.h>   ......
折腾了一番通过几种USB上网卡在Linux下上WCDMA,在此记录一下:
通用配置文件:
/etc/ppp/peers/wcdma :
/dev/ttyACM0
460800
connect '/etc/ppp/chat-wcdma'
noauth
usepeerdns
noipdefault
defaultroute
----
注意,其中的/dev/ttyACM0 是串口设备,后面描述。
/etc/ppp/chat-wcdma
#!/bin/sh
#
# This is ......
在linux下查看进程大家都会想到用 ps -ef|grep XXX
可是看到的不是全路径,怎么看全路径呢?
每个进程启动之后在 /proc下面有一个于pid对应的路径
例如:ps -ef|grep python
显示:oracle 4431 4366 0 18:56 pts/2 00:00:00 python Server.py
4431就是进程号
到/pro ......