2016-07-23 88 views
1

我正在圍繞glibc進行一些討論,並想要討論它的一些功能。 但是我在這裏做錯了什麼。爲什麼我不能在glibc中調用任意函數

# 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 

我的問題:在編譯期間未定義參考`nscd_init」

int main(void) { 

    nscd_init(); 

    return 0; 
} 

回報:

一個非常小的例子與主叫nscd_init()在NSCD/connections.c定義主叫這裏:

有沒有辦法在我的程序中調用glibc函數,或者我誤解了一些東西?

非常感謝提前!

回答

0

glibc不會導出它用於公共用途的每個符號(即用於用戶應用程序)。這恰好是glibc內部使用的一個私有符號,只與nscd有關,您不應該使用這個符號,反正也不是一個非常有趣的功能。

如果你想了解更多關於符號可見性的知識以及它的含義,請致電this is a good starting point

+0

我對這個函數並不特別感興趣,但總體上調用了內部函數,儘管我感覺這是不對的。感謝您的鏈接,一定會閱讀它! – segway

1

添加到伊麗莎白的答案。

如果要在.so中列出符號,請嘗試使用nm。 -g開關僅打印外部可用的符號,而-D查看動態符號表(用於動態鏈接而不是用於調試)。要查看符號,你可以在使用的glibc鏈接:

[email protected] ~/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的功能:

[email protected] ~/se $ nm -Dg /lib/x86_64-linux-gnu/libc.so.6 | grep nscd 
0000000000129670 T __nss_disable_nscd 

nscd_init不適用於鏈接。

相關問題