द्वारा पाया जा रहा है मैं अजगर विकास फ़ाइलों की उपलब्धता के लिए परीक्षण करने के लिए एक छोटी सी कार्यक्रम है:अपरिभाषित संदर्भ - lib के बावजूद लिंकर
#include<Python.h>
int main(){Py_Initialize(); Py_Finalize(); }
मैं इसे संकलन gcc -I/usr/include/python2.7 -lpython2.7 p.c
के रूप में (अजगर 2.7 स्थापित के साथ)। यह Ubuntu 12.04 (स्पष्ट) के ज्यादातर साफ chroot पर अन्य मशीनों पर ठीक काम करता है, सिवाय इसके कि मैं बार आ रही है
/tmp/ccj8Mgjb.o: In function `main':
p.c:(.text+0x5): undefined reference to `Py_Initialize'
p.c:(.text+0xa): undefined reference to `Py_Finalize'
collect2: ld returned 1 exit status
हेडर स्थापित कर रहे हैं, /usr/lib/libpython2.7.so
मौजूद है, लेकिन फिर भी लिंकर विफल रहता है। प्रतीक .so
फ़ाइल में सूचीबद्ध है, और जीसीसी सही libpython2.7.so
पढ़ रही है:
$ nm -D libpython2.7.so.1.0 | grep Py_Initialize
00000000000c9c20 T Py_Initialize
00000000000c9260 T Py_InitializeEx
$ strace -f gcc -I/usr/include/python2.7 -lpython2.7 /tmp/p.c 2>&1 |grep libpython2.7 |grep open
[pid 10618] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/libpython2.7.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10618] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/libpython2.7.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10618] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libpython2.7.so", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10618] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libpython2.7.a", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 10618] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libpython2.7.so", O_RDONLY) = 7
कोई भी विचार?
धन्यवाद, यह काम किया! नई बात सीखा। – eudoxos
बीटीडब्ल्यू कोई विचार है कि यह अन्य मशीनों के लिए क्यों काम करता है? क्या वह संस्करण-निर्भर व्यवहार है? – eudoxos
यह उस लिंकर पर निर्भर करता है जिसका उपयोग किया जा रहा है, मुझे लगता है। लेकिन अगर आप इसे बाद में डालते हैं तो यह हमेशा काम करेगा। – yiding