Tôi đang cố gắng xây dựng một chương trình chống lại wxWidgets và tôi gặp lỗi liên kết. Tôi thực sự hiểu ý nghĩa của nó. Lỗi này là:ELF: liên kết: Tại sao tôi nhận được các tham chiếu không xác định trong các tệp .so
/usr/lib/libwx_baseu-2.8.so: undefined reference to `std::ctype<char>::_M_widen_init() [email protected]_3.4.11'
Điều tôi không hiểu là tại sao lỗi này là libwx_baseu-2.8.so
. Tôi nghĩ rằng các tệp .so
có tất cả các ký hiệu được giải quyết, trái với .o
tệp vẫn cần liên kết.
Khi tôi ldd
các .so
, tôi nhận được có thể giải quyết tất cả các thư viện liên kết của nó, vì vậy không có vấn đề đó:
$ ldd /usr/lib/libwx_baseu-2.8.so
linux-gate.so.1 => (0x00476000)
libz.so.1 => /lib/libz.so.1 (0x00d9c000)
libdl.so.2 => /lib/libdl.so.2 (0x002a8000)
libm.so.6 => /lib/libm.so.6 (0x00759000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x002ad000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0068d000)
libpthread.so.0 => /lib/libpthread.so.0 (0x006f0000)
libc.so.6 => /lib/libc.so.6 (0x00477000)
/lib/ld-linux.so.2 (0x007f6000)
Liệu nó có nghĩa là các tập tin .so
không được biên soạn một cách chính xác (trong trường hợp đó, nó một lỗi trong gói phân phối của tôi) hoặc có nghĩa là có các thư viện bị thiếu trên dòng lệnh của trình liên kết cho chương trình cụ thể của tôi không?
Ngoài ra, bạn có biết cách tôi có thể nhận danh sách các biểu tượng không xác định trong tệp ELF hay không. Tôi đã thử readelf -s
nhưng tôi không thể tìm thấy biểu tượng bị thiếu.
Cảm ơn bạn.
Mildred
Nếu bạn gặp sự cố khi liên kết, có thể hữu ích nếu bạn đăng dòng lệnh trình liên kết chính xác. – ndim