蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 | -->
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程 -->


    

蓝森林 http://www.lslnet.com 2006年8月16日 14:08

some tips

Q:[jbtzhm]为什么我用高版本的libc编译出的程序不能在低版本libc上运行,系统是怎么完成的?
A:[jbtzhm]gcc生成后的程序中添加了类型为SHT_GNU_verdef的节,包含glibc的版本信息,防止高版本的glibc连接的程序在低版本上运行。
./ls: /lib/libc.so.6: version `GLIBC_2.2.3' not found (required by ./ls)
./ls: /lib/libc.so.6: version `GLIBC_2.2' not found (required by ./ls)

Q:[jbtzhm]为什么我用-lstdc++链接程序,但是用ldd看时却使用的是libstdc++-XXXXXXXX的库?
A:[jbtzhm]ld链接程序时填写DT_NEEDED项(描述所需动态库名字)时,首先采用动态库中DT_SONAME的描述,如果没有此描述才采用文件名字填写DT_NEEDED,可以用objdump命令行查看libstdc++或其他动态库的DT_SONAME值.

Q:[jbtzhm]那么如何指定动态库的DT_SONAME值呢?
A:[jbtzhm]缺省情况下gcc -shared 编出的动态库是不只定DT_SONAME值的,如果指定可以采用
gcc -shared -o libtest.so libtest.c -fpic -Wl,-hlibnottest.so
这样libtest.so的DT_SONAME就被指定成了libnottest.so。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com