Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1481048
  • 博文数量: 228
  • 博客积分: 1698
  • 博客等级: 上尉
  • 技术积分: 3241
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-24 21:49
个人简介

Linux

文章分类

全部博文(228)

文章存档

2017年(1)

2016年(43)

2015年(102)

2014年(44)

2013年(5)

2012年(30)

2011年(3)

分类: LINUX

2015-02-03 17:57:49

打算用packetdrill测点东西,从下载源码后,进行安装。
根据README,安装过程是很简单的,不过解压源码后先需要把configure设置为可执行权限, configure判断当前的系统类型然后建立Makefile的软连接指向
对应类型的Makefile.Linux/Makefile.FreeBSD等。

./configure && make

make出错了,提示/usr/bin/ld: cannot find -lpthread,
于是进行检查,发现pthread库已经安装,不过是在64位系统,所以在/etc/lib.so.conf指定了库路径,检查没有发现问题。

没想太多,跑到!forum/packetdrill
的邮件列表看了一下,发现有人提到了相同问题。
一看答案,郁闷了半天,原来Makefile中gcc 指定了-static,自己也没仔细看。

于是安装静态库,yum install glibc-static,然后可以成功编译。

或者可以把-static的选项去掉,也是可以编译过的。

另外,简单说一下:

GCC
链接库分静态库和动态库,静态库默认以libxxx.a的命名方式,而动态库以libxxx.so的命名方式。
链接静态库时单独复制一份库代码,运行时不加载库文件,而动态库运行时加载,使用该库文件的所有程序在内存中共享一份,不需要多次加载。
GCC链接-lxxx库时,默认会从/lib/和/usr/lib这两个地方去找链接库,若需要加入其他链接库有以下方式:
1)/etc/目录下有ld.so.conf、ld.so.cache和ld.so.conf.d/,其中ld.so.conf.d目录下又有多个*.conf的配置文件。
    
ld.so.conf内容为include /etc/ld.so.conf.d/*.conf,即包含ld.so.conf.d目录下所有配置文件,可以将私有链接目录加入已有配置文件,或新建私有配置文件。
    另外,为了提高搜索效率,系统预先对所有配置文件生成了一个二进制的处理文件,即ld.so.cache,需要运行ldconfig手动更新这个文件。

2)
LD_LIBRARY_PATH参数,利用export $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxx增加自己的库路径,尽量不用。当指定库文件API与原有系统API冲突时优先使用LD_LIBRARY_PATH指定的库文件的API,其加载的时机早于系统其他库文件。

3)编译gcc参数时直接利用-L参数指明链接库路径

吃一堑,长一智,细心点总是没错的。。
阅读(2343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~