यहां क्या गलत हो सकता है?प्रतीक के अनिश्चित संदर्भ के बावजूद जब एनएम इंगित करता है कि यह प्रतीक साझा लाइब्रेरी में मौजूद है
#include "libmnl/libmnl.h"
int main() {
struct mnl_socket *a = mnl_socket_open(12);
}
और एक सरल gcc
संकलन (gcc -lmnl main.c
) मैं निम्नलिखित त्रुटियाँ प्राप्त चलाने के बाद:
/tmp/cch3GjuS.o: In function `main':
main.c:(.text+0xe): undefined reference to `mnl_socket_open'
collect2: ld returned 1 exit status
साझा लाइब्रेरी पर एनएम चल रहा है पता चलता है कि यह वास्तव में पाया है: मैं निम्नलिखित सरल वर्ग है
[email protected]:/tmp$ nm -D /usr/lib/libmnl.so | grep mnl_socket_open
0000000000001810 T mnl_socket_open
यह उबंटू 12.04 पर हो रहा है। libmnl-dev और libmnl0 पैकेज स्थापित हैं। gcc
की strace
उत्पादन इंगित करता है कि ld
बिल्कुल * .so फ़ाइल उपयोग कर रहा है:
[pid 10988] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/libmnl.so", 0x7fff2a39b470) = -1 ENOENT (No such file or directory)
[pid 10988] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/libmnl.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10988] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/libmnl.a", 0x7fff2a39b4d0) = -1 ENOENT (No such file or directory)
[pid 10988] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/libmnl.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10988] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libmnl.so", 0x7fff2a39b470) = -1 ENOENT (No such file or directory)
[pid 10988] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libmnl.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10988] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libmnl.a", 0x7fff2a39b4d0) = -1 ENOENT (No such file or directory)
[pid 10988] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libmnl.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10988] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libmnl.so", {st_mode=S_IFREG|0644, st_size=18608, ...}) = 0
[pid 10988] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libmnl.so", O_RDONLY) = 7
धन्यवाद, यह तेज़ था। मुझे लगता है कि ऑब्जेक्ट के बाद मैंने "गलती से" इस्तेमाल किया था, इसलिए चीजें अभी तक ठीक काम कर रही थीं। –