分享
 
 
 

Unix编程/应用问答中文版---16.库相关问题

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

作者:不祥 [文章出自: www.fanqiang.com]

16. 库相关问题

16.1 在Solaris 7下编写网络程序需要链接哪些库

16.2

16.3 链接过程中库的顺序

16.4

16.5

16.6 /usr/lib/ld.so.1损坏或丢失

16.7

16.8

16.9 Solaris 8下如何配置运行时链接环境

--------------------------------------------------------------------------

16. 库相关问题

16.1 在Solaris 7下编写网络程序需要链接哪些库

Q: inet_pton()是什么库里的,为什么man手册里无对应内容

A: scz <scz@nsfocus.com>

这个函数比较新,还有另外几个,比如inet_ntop()。关于它们的详细介绍参看

<<Unix Network Programming>> 3.7 小节。文件/usr/include/arpa/inet.h中定义

有:

extern int inet_pton ( int, const char *, void * );

用/usr/ccs/bin/nm工具观察三个动态链接库libresolv.so、libsocket.so、

libnsl.so提供的全局函数

显然,如果涉及RPC编程,必然需要libnsl.so,而inet_pton()来自libresolv.so。

总结一下,实在不能确定的时候,编译时指定链接开关如下:

-lsocket -lnsl -lresolv

16.2 SUID设置和LD_LIBRARY_PATH环境变量

Q: RedHat Linux 6.1/6.2,C编程,还有一些脚本

execl()以及其他exec...()执行一个SUID程序的时候,出于安全考虑,会清除

LD_LIBRARY_PATH环境变量,仅仅依靠系统全局设置搜索共享库。参看如下URL

http://spdoc.pdc.kth.se/doc_link/C/a_doc_lib/libs/basetrf1/exec.htm

现在有一个程序,需要一个正确的LD_LIBRARY_PATH环境变量设置才能运行,可是

由于某些原因必须做SUID设置,结果最终运行失败。我尝试在程序中putenv()、

setenv(),失败,显然LD_LIBRARY_PATH环境变量需要在程序加载过程中由动态链

接器使用,程序中的putenv()、setenv()为时已晚。

于是我写了一个脚本,在脚本中设置LD_LIBRARY_PATH环境变量,调用C程序,对

脚本做SUID设置。但是脚本的SUID设置并没有传递给子进程(这里就是那个C程序)

A: Paul Sack <paul-sackun@jefe.eyep.net>

到www.google.com用"suid shell scripts race conditions"进行搜索,查看

BugTraq相关讨论。安全的解决办法是用C写一个SUID WRAPPER去exec...()你的C程序,

在SUID WRAPPER中设置LD_LIBRARY_PATH环境变量。

A: Andrew Gierth <andrew@erlenstar.demon.co.uk>

如果一个程序是SUID过的,将导致LD_LIBRARY_PATH环境变量被忽略,但是这不是问

题本质所在,本质原因在于ruid不等于euid(或者rgid不等于egid)。所以wrapper中

仅仅重置环境变量是不够的,必须想办法修改ruid等于euid。最好还是重新编译程序,

使之不依赖于LD_LIBRARY_PATH环境变量。

16.3 链接过程中库的顺序

Q: 有几个库文件A.a、B.a、common.a,前两者用到了定义在后者中的例程,如果把

common.a放在前面,链接器报告存在无法解析的符号名,放在最后则无问题。

A: Floyd Davidson <floyd@ptialaska.net>

链接器按照命令行上指定顺序搜索库文件和目标文件(.a .o),二者之间的区别在

于.o文件被全部链接进来,而只从库文件中析取所需模块,仅当某个模块可以解

析当前尚未成功解析的符号时,该模块被析取后链接进来。如果库文件无法解析

任何当前尚未成功解析的符号,不从中析取也不发生链接。

Unix编程新手的常见问题是数学函数并不在标准C库中,而是在libm.a中

cc -lm foo.c

这里foo.c用到了数学库中的符号,但是链接器无法正确解析。当搜索到libm.a时,

来自foo.c的数学函数符号尚未出现,因此不需要析取libm.a的任何模块。接下来

foo.o链接进来,增加了一批尚未成功解析的符号,但已经没有libm.a可供使用了,

因此数学库必须在foo.o之后被搜索到。

cc foo.c -lm

在你的问题中,如果common.a首先被搜索到,因为不匹配尚未成功解析的符号,

而被丢弃。结果A.a和B.a真正链接进来的时候,已经没有库可以解析符号了。

16.6 /usr/lib/ld.so.1损坏或丢失

Q: 意外地覆盖了ld.so.1,幸运的是有一个原始备份,可我没有一个静态链接版本的

命令去恢复它。

Q: 我在Solaris 2.6中做了"mv /usr/lib /usr/lib1",本意是想使用自己的库,但

是现在所有程序都报告"找不到/usr/lib/ld.so.1",怎么办

A: scz <scz@nsfocus.com>

不要重启动,立即用/usr/sbin/static/mv、/usr/sbin/static/cp命令恢复

# ls /usr/sbin/static

cp* ln* mv* rcp* tar*

#

Q: 那如果此时/usr被改名了,怎么办?

A: faint,谁这么变态。假设/usr改名成了/faint,

1) /faint/sbin/static/cp /faint/sbin/static/mv /tmp/mv

2) /tmp/mv /faint /usr

我不确定

1) /faint/sbin/static/mv /faint /usr

能否成功,你可以自己测试一下效果。或者

ok boot cdrom -s (放入启动安装光盘)

mount /dev/dsk/c0t0d0s0 /mnt (这里指定原根区对应的原始设备名)

mv /mnt/faint /mnt/usr

D: cirrus@SMTH

建议把/usr/sbin/static下的东西拷一份到/sbin下或者其它比较可信的跟/在同一个

fs的目录下。装机器的时候,不管什么OS,/usr都是单独一个fs的。

16.9 Solaris 8下如何配置运行时链接环境

Q: 在Linux下我知道用ldconfig(8)配置运行时链接环境,但是在Solaris 8下呢

A: <cypher@punk.net>

你总是可以利用 LD_LIBRARY_PATH 环境变量,对于Solaris 8,还可以参看crle(1)

手册页。

A: Logan Shaw <logan@cs.utexas.edu>

如果在链接时使用了"-R"和"-L"选项,则相关动态库的路径将保存在ELF文件中,于

是以后的运行中不再需要设置环境变量去定位动态库。比如,有一个

/usr/local/lib/libfoo.so,而你的bar程序需要这个libfoo.so,编译、链接时最好

这样

gcc -Wall -pipe -O3 -o bar -R/usr/local/lib -L/usr/local/lib bar.c -lfoo

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有