我正在研究 glibc,想弄乱它的一些功能。 但是我在这里做错了。
一个非常小的调用 nscd/connections.c 中定义的 nscd_init() 的例子:
int main(void) {
nscd_init();
return 0;
}
在编译期间返回对`nscd_init'的 undefined reference :
# gcc -o test1 test1.c
/tmp/ccKHkJ4L.o: In function `main':
test1.c:(.text+0xa): undefined reference to `nscd_init'
collect2: ld returned 1 exit status
我的问题:
有没有办法在我的程序中调用 glibc 函数,或者我严重误解了什么?
非常感谢!
最佳答案
添加到伊丽莎白的回答。
如果您想在 .so 中列出符号,请尝试使用 nm . -g 开关仅打印外部可用的符号,而 -D 查看动态符号表(用于动态链接而不是调试)。要查看可以在 glibc 中链接的符号:
evaitl@bb ~/se $ nm -Dg /lib/x86_64-linux-gnu/libc.so.6 | head
0000000000045960 T a64l
0000000000036eb0 T abort
00000000003c4be0 B __abort_msg
000000000003a620 T abs
00000000001077d0 W accept
0000000000107fa0 T accept4
00000000000f6a60 W access
00000000000fce40 T acct
00000000000fe120 W addmntent
00000000000478e0 W addseverity
....
至于 nscd 功能:
evaitl@bb ~/se $ nm -Dg /lib/x86_64-linux-gnu/libc.so.6 | grep nscd
0000000000129670 T __nss_disable_nscd
nscd_init
不可用于链接。
关于c - 为什么我不能在 glibc 中调用任意函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38543964/