Mặc dù điều này sẽ không trả lời chính xác câu hỏi của bạn, điều này có thể giúp bạn tự khắc phục sự cố.
Các lỗi là thế này:
ImportError: /usr/lib/libportmidi.so.0: undefined symbol: snd_seq_event_input_pending
Các undefined symbol
là một thất bại của mối liên kết động để tìm mã cần thiết cho việc snd_seq_event_input_pending
chức năng.
Trên ví dụ 32 bit Hệ thống Oneiric, chúng tôi có thể thực hiện việc này để xem một số biểu tượng của libportmidi.so.0
.
nm -DC /usr/lib/libportmidi.so.0 | grep snd_seq_event_input_pending
U snd_seq_event_input_pending
Điều này cho chúng tôi biết rằng thư viện libportmidi
yêu cầu mã cho snd_seq_event_input_pending
nhưng biểu tượng không xác định. Vì vậy, đối với libportmidi
để hoạt động, nó cũng phải tải thêm một thư viện chứa hàm này.
Trên Oneiric tôi thấy rằng biểu tượng này được xác định trong libasound2.so.2
.
nm -DC /usr/lib/i386-linux-gnu/libasound.so.2 | grep snd_seq_event_input_pending
000a0fa0 T snd_seq_event_input_pending
T
cho biết chức năng tồn tại và nằm trong đoạn văn bản (mã).
Thông thường, việc liên kết các thư viện được liên kết diễn ra tự động dưới dạng libasound.so.2
nên được tham chiếu bởi libportmidi
. Trên cùng một hệ thống.
ldd /usr/lib/libportmidi.so.0
....
libasound.so.2 => /usr/lib/i386-linux-gnu/libasound.so.2 (0x00e35000)
thể hiện rằng libmidi
tùy thuộc vào libasound
. Trong danh sách đầu ra ldd
trong nhận xét của bạn, không có tham chiếu đến libasound
và do đó, nó sẽ không cố gắng tự động liên kết động libasound.so.2
khi được tải, dẫn đến lỗi của bạn.
Có một vài lý do tại sao có thể có một lỗi:
- Cách liên kết từ
libportmidi
có thể có sự thay đổi từ Oneiric để chính xác. ví dụ: libportmidi
có thể tìm phụ thuộc của riêng mình cho libasound
. (Không chắc).
- Có lỗi trong bao bì
libportmidi
nơi không tham chiếu libasound.so.2
. Đây có thể là nền tảng cụ thể (ví dụ: chỉ có lỗi trên hệ thống 64 bit).
tôi đề nghị bạn nên cố gắng tìm hiểu các thư viện trên hệ thống của bạn có chứa các snd_seq_event_input_pending
chức năng và sau đó làm việc ngược để thử và xác định lý do tại sao nó đã không được liên kết với libportmidi
.
Lệnh bash sau đây sẽ giúp bạn tìm thấy các libaries thực hiện snd_seq_event_input_pending
.Nếu bạn không tìm thấy bất cứ điều gì, có một vấn đề với các thư viện được cài đặt trên máy tính của bạn.
find /lib /usr/lib -name "lib*.so.*" | while read f; do
if nm -DC "$f" | grep -q 'T snd_seq_event_input_pending'; then
echo "$f"
fi
done
Run ' ldd/usr/lib/libportmidi.so.0'. Nó có hiển thị bất kỳ thư viện bị thiếu nào không? –
'ldd/usr/lib/libportmidi.so.0' ' linux-vdso.so.1 => (0x00007fffdabff000) ' ' libporttime.so.0 => /usr/lib/libporttime.so.0 (0x00007ff35ac2f000) ' ' libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff35a870000) ' ' libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so .0 (0x00007ff35a652000) ' ' /lib64/ld-linux-x86-64.so.2 (0x00007ff35b05e000) ' –
Tôi nên tìm gì? –