Próbuję załadować niektóre natywne biblioteki linuksowe przy użyciu mono. Zabrakło mi mono z flagą debugowania:Natywne P/Wywołanie z Mono w systemie Linux: DllNotFound
Mono: DllImport attempting to load: 'libavformat.57'.
Mono: DllImport error loading library '/home/filoe/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug/libavformat.57': '/home/filoe/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug/libavformat.57: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library '/home/filoe/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug/libavformat.57.so': 'libavcodec.so.57: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library '/usr/lib/libavformat.57': '/usr/lib/libavformat.57: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library '/usr/lib/libavformat.57.so': '/usr/lib/libavformat.57.so: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library 'libavformat.57': 'libavformat.57: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library 'libavformat.57.so': 'libavformat.57.so: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library 'libavformat.57': 'libavformat.57: cannot open shared object file: No such file or directory'.
Mono: DllImport unable to load library 'libavformat.57: cannot open shared object file: No such file or directory'.
Mono: DllImport attempting to load: 'libavformat.57'.
Istnieje wiele stanowisk odnośników, ale przynajmniej jeden z nich powinien pasować. ten sposób mój katalog wygląda następująco:
[email protected]:~/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug$ dir
CSCore.Ffmpeg.dll CSCore.Ffmpeg.dll.mdb CSCore.Linux.dll.config FFmpeg libavformat.57 libswresample.2 LinuxSample.exe.mdb
CSCore.Ffmpeg.dll.config CSCore.Linux.dll CSCore.Linux.dll.mdb libavcodec.57 libavutil.55 LinuxSample.exe log.txt
[email protected]:~/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug$
Jak widać, libavformat.57
ma. Więc mono mówi mi, że nie można go znaleźć?
Poniższy kod demonstruje, co zostało zrobione:
Deklarację niektórych DllImport
metod:
[DllImport("avformat-57", EntryPoint = "av_register_all", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void av_register_all();
[DllImport("avcodec-57", EntryPoint = "avcodec_register_all", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
internal static extern void avcodec_register_all();
Projekt zawiera również plik o nazwie „{nazwa zespołu wyjściowego} .config ":
<configuration>
<dllmap os="linux" dll="avcodec-57" target="libavcodec.57"/>
<dllmap os="linux" dll="avformat-57" target="libavformat.57"/>
</configuration>
Jak widać powyżej, mapowanie działa dobrze. Mono przyjmuje "avformat-57" i tłumaczy go na "libavformat.57". Teraz mono szuka biblioteki o nazwie "libavformat.57" lub kilku podobnych nazw, takich jak "libavformat.57.so". Mono wyszukuje w katalogu zespołu wykonującego.
Ale nie jest w stanie znaleźć pliku, którego szuka (zgodnie z dziennikiem zamieszczonym powyżej). Więc dlaczego?
Dzięki!
Pozdrowienia
współdzielone biblioteki mają '.so' rozszerzenia, to nie jest poprawnie zbierając bibliotekę, spróbuj zmienić go i ponownie odwołanie do wspólnej biblioteki? – t0mm13b
Nie, nie określa, które rozszerzenia lub kombinacje nazw plików, których używam. Komunikat o błędzie mówi, że plik, który zdecydowanie istnieje, nie może zostać znaleziony przez mono. –
pokaż nam [MCVE], aby to pokazać. – t0mm13b