http://topic.csdn.net/u/20090608/15/36bf4a6c-cdf5-4e05-90f3-c0ac0d3f6743.html?5823
请教:如何知道当前所用的gcc调用的是哪个版本的glibc库?及这个glibc库的位置?谢谢!
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
结帖率:100.00%
发表于:2009-06-08 15:24:48 楼主
如题:我的虚拟机上有gcc 和 arm-uclinux-gcc ,但我不知道gcc 调用的是哪个版本的glibc程序库,
以及该库存放在什么地方?同理,arm-uclinux-gcc 调用的是哪个版本的uClibc库,及该库的位置,
请大家指点一下,非常感谢!
问题点数:60 回复次数:12 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
xperson
xperson
等级:
可用分等级:大财主
总技术分:0
总技术分排名:353129
发表于:2009-06-08 15:57:581楼 得分:0
使用ldd指令 可以看到程序连接的动态库
如下
[root@R020 ~]# ldd /bin/ls
linux-gate.so.1 => (0x0016b000)
librt.so.1 => /lib/librt.so.1 (0x48319000)
libacl.so.1 => /lib/libacl.so.1 (0x41b1f000)
libselinux.so.1 => /lib/libselinux.so.1 (0x48324000)
libc.so.6 => /lib/libc.so.6 (0x41991000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4cb7d000)
/lib/ld-linux.so.2 (0x4196f000)
libattr.so.1 => /lib/libattr.so.1 (0x41b18000)
libdl.so.2 => /lib/libdl.so.2 (0x4c908000)
libsepol.so.1 => /lib/libsepol.so.1 (0x41b38000)
直接在shell下运行libc.so.6可以得到c library版本
[root@R020 ~]# /lib/libc.so.6
GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.1.1 20061011 (Red Hat 4.1.1-30).
Compiled on a Linux 2.6.9 system on 2007-03-14.
Available extensions:
The C stubs add-on version 2.1.2.
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
GNU libio by Per Bothner
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
RT using linux kernel aio
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
puheavy123
manifoldyu
等级:
可用分等级:乞丐
总技术分:2394
总技术分排名:9743
发表于:2009-06-08 16:06:372楼 得分:0
用strace跟踪一下,什么都出来了,当让,ls的ldd也很好用
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-08 16:07:393楼 得分:0
非常感谢!!!
那如果我写了一个hello.c 的C源文件,我用
gcc 编译: gcc -g -o ./hello ./hello.c
编译出来的hello后,我用你所说的方法,
[root@R020 ~]# ldd ./hello
[root@R020 ~]# /lib/libc.so.6
就可以知道该gcc编译时,链接的是哪个版本的glibc库了吗?同样的道理,
arm-uclinux-gcc -g -o ./armHello ./hello.c 后,
再
[root@R020 ~]# ldd ./armHello
...
也可以知道arm-uclinux-gcc用的是哪个版本的uClibc库。
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-08 16:14:144楼 得分:0
非常感谢!!!
用strace 可以吗?
我试了一下,打印如下:
[root@localhost programTest]# strace ./mktimeTest
execve("./mktimeTest", ["./mktimeTest"], [/* 30 vars */]) = 0
brk(0) = 0x98f6000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f54000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=99498, ...}) = 0
mmap2(NULL, 99498, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f3b000
close(3) = 0
open("/lib/i686/nosegneg/libc.so.6", O_RDONLY) = 3
read(3, "/177ELF/1/1/1/0/0/0/0/0/0/0/0/0/3/0/3/0/1/0/0/0pP/222I"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1589336, ...}) = 0
mmap2(0x4990f000, 1312164, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4990f000
mmap2(0x49a4a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13a) = 0x49a4a000
mmap2(0x49a4d000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x49a4d000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f3a000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f3a6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x49a4a000, 8192, PROT_READ) = 0
mprotect(0x48f59000, 4096, PROT_READ) = 0
munmap(0xb7f3b000, 99498) = 0
brk(0) = 0x98f6000
brk(0x9917000) = 0x9917000
open("/etc/localtime", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=165, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=165, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f53000
read(3, "TZif/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/3/0/0/0/3/0"..., 4096) = 165
close(3) = 0
munmap(0xb7f53000, 4096) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f53000
write(1, "tCur = 1243395000/n", 18tCur = 1243395000
) = 18
write(1, "tmCurComp: 2009, 5, 27, 11, 30, "..., 34tmCurComp: 2009, 5, 27, 11, 30, 0
) = 34
write(1, "ctime(tCur) = Wed May 27 11:30:0"..., 39ctime(tCur) = Wed May 27 11:30:00 2009
) = 39
write(1, "/n", 1
) = 1
time(NULL) = 1243958924
write(1, "time(NULL) = 1243958924/n", 24time(NULL) = 1243958924
) = 24
time(NULL) = 1243958924
write(1, "ctime(&(time(NULL))) = Wed Jun "..., 48ctime(&(time(NULL))) = Wed Jun 3 00:08:44 2009
) = 48
write(1, "/n", 1
) = 1
exit_group(0) = ?
Process 10278 detached
那要怎么看啊?还有,gcc调用的那个glibc的位置在哪呀?可否再费心解释一下。谢谢!
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
puheavy123
manifoldyu
等级:
可用分等级:乞丐
总技术分:2394
总技术分排名:9743
发表于:2009-06-08 16:15:055楼 得分:0
可以追踪动态链接库
strace的信息详细一点
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-08 16:39:196楼 得分:0
你是说,这样子输入吗?
[root@localhost programTest]# ldd ./mktimeTest
linux-gate.so.1 => (0x007e2000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x4990f000)
/lib/ld-linux.so.2 (0x48f40000)
[root@localhost programTest]# strace /lib/i686/nosegneg/libc.so.6
execve("/lib/i686/nosegneg/libc.so.6", ["/lib/i686/nosegneg/libc.so.6"], [/* 30 vars */]) = 0
brk(0) = 0x4b46d000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7 fee000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7 fed000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7fed6c0, limit:1048575, seg_ 32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, usea ble:1}) = 0
mprotect(0x49a4a000, 8192, PROT_READ) = 0
mprotect(0x48f59000, 4096, PROT_READ) = 0
write(1, "GNU C Library stable release ver"..., 819GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.1.1 20060928 (Red Hat 4.1.1-28).
Compiled on a Linux 2.6.9 system on 2006-10-08.
Available extensions:
The C stubs add-on version 2.1.2.
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
GNU libio by Per Bothner
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
RT using linux kernel aio
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
) = 819
exit_group(0) = ?
Process 10329 detached
[root@localhost programTest]# strace /lib/i686/nosegneg/libc.so.6
execve("/lib/i686/nosegneg/libc.so.6", ["/lib/i686/nosegneg/libc.so.6"], [/* 30 vars */]) = 0
brk(0) = 0x4a700000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f50000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f4f000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f4f6c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x49a4a000, 8192, PROT_READ) = 0
mprotect(0x48f59000, 4096, PROT_READ) = 0
write(1, "GNU C Library stable release ver"..., 819GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.1.1 20060928 (Red Hat 4.1.1-28).
Compiled on a Linux 2.6.9 system on 2006-10-08.
Available extensions:
The C stubs add-on version 2.1.2.
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
GNU libio by Per Bothner
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
RT using linux kernel aio
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
) = 819
exit_group(0) = ?
Process 10334 detached
这样子,就可以知道该gcc调用的glibc的版本号是2.5,对吧,那该glibc库(源代码)的位置在哪呢?
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
puheavy123
manifoldyu
等级:
可用分等级:乞丐
总技术分:2394
总技术分排名:9743
发表于:2009-06-08 16:46:157楼 得分:0
再通过这种方法调用一次
strace gcc -g -o ./hello ./hello.c
你可以结合其他工具来过滤信息的嘛。。。。这样你就可以更容易的看到glibc库(源代码)的位置了
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-08 17:17:318楼 得分:0
非常感谢!
我这样操作:
[root@localhost programTest]# arm-uclibc-linux-gcc -g -o ./armSscanfTest sscanfTest.c
[root@localhost programTest]# ldd ./armSscanfTest
not a dynamic executable
这是为什么呀?我还是看不到arm-uclibc-linux-gcc 调用的是哪个uClibc库啊?
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-08 17:28:349楼 得分:0
而我这样子操作:
[root@localhost programTest]# strace arm-uclibc-linux-gcc -g -o ./armSscanfTest sscanfTest.c
execve("/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin/arm-uclibc-linux-gcc", ["arm-uclibc-linux-gcc", "-g", "-o", "./armSscanfTest", "sscanfTest.c"], [/* 30 vars */]) = 0
brk(0) = 0x8222000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f3a000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=99498, ...}) = 0
mmap2(NULL, 99498, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f21000
close(3) = 0
open("/lib/i686/nosegneg/libc.so.6", O_RDONLY) = 3
read(3, "/177ELF/1/1/1/0/0/0/0/0/0/0/0/0/3/0/3/0/1/0/0/0pP/222I"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1589336, ...}) = 0
mmap2(0x4990f000, 1312164, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x4990f000
mmap2(0x49a4a000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13a) = 0x49a4a000
mmap2(0x49a4d000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x49a4d000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f20000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7f206c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x49a4a000, 8192, PROT_READ) = 0
mprotect(0x48f59000, 4096, PROT_READ) = 0
munmap(0xb7f21000, 99498) = 0
brk(0) = 0x8222000
brk(0x8243000) = 0x8243000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=55557696, ...}) = 0
mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7d20000
close(3) = 0
rt_sigaction(SIGINT, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {0x804ab44, [INT], SA_RESTART}, {SIG_IGN}, 8) = 0
rt_sigaction(SIGHUP, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGHUP, {0x804ab44, [HUP], SA_RESTART}, {SIG_IGN}, 8) = 0
rt_sigaction(SIGTERM, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGTERM, {0x804ab44, [TERM], SA_RESTART}, {SIG_IGN}, 8) = 0
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGPIPE, {0x804ab44, [PIPE], SA_RESTART}, {SIG_IGN}, 8) = 0
rt_sigaction(SIGCHLD, {SIG_DFL}, {SIG_DFL}, 8) = 0
access("/usr/lib/qt-3.3/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/kerberos/sbin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/kerberos/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/sbin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/sbin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/sbin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin/arm-uclibc-linux-gcc", X_OK) = 0
lstat64("/opt", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/opt/hisilicon", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/opt/hisilicon/toolchains", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/opt/hisilicon/toolchains/arm-uclibc-linux-soft", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat64("/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin/arm-uclibc-linux-gcc", {st_mode=S_IFREG|0744, st_size=163875, ...}) = 0
access("/usr/lib/qt-3.3/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/kerberos/sbin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/kerberos/bin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
access("/usr/local/sbin/arm-uclibc-linux-gcc", X_OK) = -1 ENOENT (No such file or directory)
...(这里省略了一些)
stat64("/tmp/cctrRlhv.s", {st_mode=S_IFREG|0600, st_size=5668, ...}) = 0
unlink("/tmp/cctrRlhv.s") = 0
exit_group(0) = ?
Process 10484 detached
显示的结果是"/lib/i686/nosegneg/libc.so.6", 那arm-uclinux-gcc 的调用库也是glibc罗,那感觉好像不对呀?
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
puheavy123
manifoldyu
等级:
可用分等级:乞丐
总技术分:2394
总技术分排名:9743
发表于:2009-06-08 17:32:4710楼 得分:0
如果你说不对的话,那我就没法说了,这个是系统跟踪日志。。。
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-08 18:29:3611楼 得分:0
还有一点很奇怪的是:
[root@localhost programTest]# arm-uclibc-linux-gcc -g -o ./armMktimeTest ./mktimeTest.c
[root@localhost programTest]# file ./armMktimeTest
./armMktimeTest: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked (uses shared libs), not stripped
[root@localhost programTest]# ldd ./armMktimeTest
not a dynamic executable
这是为什么呢?明明是动态链接的啊?为什么ldd会看不到链接的库呢?是不是要用
arm-uclibc-linux-ldd ./armMktimeTest
呀?可是我这里却没有这个命令?
修改 删除 举报 引用 回复
加为好友
发送私信
在线聊天
yaoike
想念着Run的Ike
等级:
可用分等级:乞丐
总技术分:1
总技术分排名:331475
发表于:2009-06-09 18:14:1112楼 得分:0
自己顶一下,再次重复之前的问题:
还有一点很奇怪的是:
[root@localhost programTest]# arm-uclibc-linux-gcc -g -o ./armMktimeTest ./mktimeTest.c
[root@localhost programTest]# file ./armMktimeTest
./armMktimeTest: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked (uses shared libs), not stripped
[root@localhost programTest]# ldd ./armMktimeTest
not a dynamic executable
这是为什么呢?明明是动态链接的啊?为什么ldd会看不到链接的库呢?是不是要用
arm-uclibc-linux-ldd ./armMktimeTest
呀?可是我这里却没有这个命令?