Chociaż nie odpowiemy dokładnie na twoje pytanie, może to pomóc w samodzielnym debugowaniu problemu.
Błąd to:
ImportError: /usr/lib/libportmidi.so.0: undefined symbol: snd_seq_event_input_pending
undefined symbol
awarii dynamicznego linkera, aby znaleźć kod wymagany dla funkcji snd_seq_event_input_pending
.
Na przykładowym 32-bitowym systemie Oneiric możemy to zrobić, aby spojrzeć na niektóre symbole z libportmidi.so.0
.
nm -DC /usr/lib/libportmidi.so.0 | grep snd_seq_event_input_pending
U snd_seq_event_input_pending
To mówi nam, że biblioteka libportmidi
wymaga kod snd_seq_event_input_pending
ale symbol jest niezdefiniowany. Aby funkcja libportmidi
mogła działać, musi również załadować dodatkową bibliotekę, która zawiera tę funkcję.
Na Oneiric stwierdziłem, że ten symbol jest zdefiniowany w 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
wskazuje, że funkcja istnieje, to w tekście (kod) segmentu.
Zwykle łączenie powiązanych bibliotek następuje automatycznie, ponieważ libasound.so.2
powinien być oznaczony jako libportmidi
. W tym samym systemie.
ldd /usr/lib/libportmidi.so.0
....
libasound.so.2 => /usr/lib/i386-linux-gnu/libasound.so.2 (0x00e35000)
co pokazuje, że libmidi
zależy libasound
. Na liście wyjściowej ldd
w komentarzach nie ma odniesienia do libasound
, więc nie będzie próbował automatycznie dynamicznie łączyć libasound.so.2
po załadowaniu, co spowoduje błąd.
Istnieje kilka powodów, dlaczego nie może być błąd:
- Droga łącząca z
libportmidi
mogą mieć zmianę z sid precyzyjnemu. np. libportmidi
może próbować znaleźć własne zależności dla libasound
. (Mało prawdopodobne).
- Istnieje błąd w pakowaniu
libportmidi
, w którym nie ma odniesienia do libasound.so.2
, tak jak powinien. Może to być specyficzne dla platformy (np. Tylko błąd w 64-bitowych systemach).
Sugerowałbym, aby spróbować dowiedzieć się biblioteki w systemie, który zawiera funkcję snd_seq_event_input_pending
a następnie pracować do tyłu, aby spróbować ustalić, dlaczego nie został on połączony z libportmidi
.
Następujące polecenie basha pomoże ci znaleźć biblioteki implementujące snd_seq_event_input_pending
.Jeśli nic nie znajdziesz, wystąpił problem z bibliotekami zainstalowanymi na twoim komputerze.
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
uruchom ' ldd/usr/lib/libportmidi.so.0'. Czy pokazuje brakujące biblioteki? –
'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) ' –
Czego powinienem szukać? –