c - 为什么我不能在 glibc 中调用任意函数

标签 c glibc

我正在研究 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/

相关文章:

c - 按特定顺序对三个数字进行排序

c - gcc 和 glibc 版本

c - 为什么glibc库使用汇编

c++ - ALSA:如何通过耳机和扬声器发送音频

c - getpwnam_r 内存泄漏

python - 将 FreeTDS ODBC 与 pyodbc 结合使用时,glibc 检测到损坏的双链表

linux - 为什么导入的函数在 Linux 中被间接调用?

c - C 中的牌组洗牌可以编译,但会出现段错误

c++ - 柏林噪声和高度图/位图

c - 为什么同一个程序在不同的运行中堆栈大小不同?