Kernel32 не найден при использовании FFmpeg.Autogen 4.1.0.2 в Mono/LinuxC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Kernel32 не найден при использовании FFmpeg.Autogen 4.1.0.2 в Mono/Linux

Сообщение Anonymous »

Я отправляю отчет об ошибке, пока публиковал это, я не знал, что могу увидеть FFmpeg.Autogen из трассировки стека. В любом случае я разместил отчет об ошибке на Github

https://github.com/Ruslan-B/FFmpeg.AutoGen/issues/109

Я пытаюсь запустить свой код в Linux, который использует FFmpeg.Autogen для взаимодействия с библиотеками ffmpeg. Я получаю файл kernel32 dll, не найденный, не могу понять почему. Он просит не публиковать сообщения о проблемах на github для устранения неполадок.
Возможная связанная проблема: https://github.com/Ruslan-B/FFmpeg.AutoGen/issues/89

Первое, что я попробовал, — это включить двоичный вспомогательный класс из примера кода, который я немного подправил. Добавлен точный путь к файлам Linux.
Второе, что я сделал, это добавил FFmpeg.AutoGen.dll.config, если он настроен правильно, и он пытается сослаться на DLL Windows, которая должна указывать на Linux.
Stacktrace :

System.DllNotFoundException: kernel32
at at (wrapper managed-to-native) FFmpeg.AutoGen.Native.WindowsNativeMethods.GetProcAddress(intptr,string)
at FFmpeg.AutoGen.Native.FunctionLoader.GetFunctionPointer (System.IntPtr nativeLibraryHandle, System.String functionName) [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\Native\FunctionLoader.cs:55
at FFmpeg.AutoGen.Native.FunctionLoader.GetFunctionDelegate[T] (System.IntPtr nativeLibraryHandle, System.String functionName, System.Boolean throwOnError) [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\Native\FunctionLoader.cs:28
at FFmpeg.AutoGen.ffmpeg.GetFunctionDelegate[T] (System.IntPtr libraryHandle, System.String functionName) [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\FFmpeg.cs:50
at FFmpeg.AutoGen.ffmpeg+c.b__4_318 () [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\FFmpeg.functions.export.g.cs:7163
at FFmpeg.AutoGen.ffmpeg.avformat_alloc_context () [0x00000] in D:\FFmpeg.AutoGen\FFmpeg.AutoGen\FFmpeg.functions.export.g.cs:7176
at FF8.FfccVaribleGroup..ctor () [0x0009c] in /home/robert/OpenVIII/FF8/FfccVaribleGroup.cs:53
at FF8.Ffcc..ctor (System.String filename, FFmpeg.AutoGen.AVMediaType mediatype, FF8.Ffcc+FfccMode mode) [0x00008] in /home/robert/OpenVIII/FF8/Ffcc.cs:31
at FF8.Module_movie_test.InitMovie () [0x00001] in /home/robert/OpenVIII/FF8/module_movie_test.cs:160
at FF8.Module_movie_test.Update () [0x000c5] in /home/robert/OpenVIII/FF8/module_movie_test.cs:88
at FF8.ModuleHandler.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x000ac] in /home/robert/OpenVIII/FF8/ModuleHandler.cs:43
at FF8.Game1.Update (Microsoft.Xna.Framework.GameTime gameTime) [0x00030] in /home/robert/OpenVIII/FF8/Game1.cs:69
at Microsoft.Xna.Framework.Game.DoUpdate (Microsoft.Xna.Framework.GameTime gameTime) [0x00019] in :0
at Microsoft.Xna.Framework.Game.Tick () [0x00103] in :0
at Microsoft.Xna.Framework.SdlGamePlatform.RunLoop () [0x00021] in :0
at Microsoft.Xna.Framework.Game.Run (Microsoft.Xna.Framework.GameRunBehavior runBehavior) [0x0008b] in :0
at Microsoft.Xna.Framework.Game.Run () [0x0000c] in :0
at FF8.Program.Main () [0x00007] in /home/robert/OpenVIII/FF8/Program.cs:17


Мой код, который запускает это:

Format = ffmpeg.avformat_alloc_context();


Binaryhelper должен правильно указать путь к файлу

internal static void RegisterFFmpegBinaries()
{
var libraryPath = "";
switch (Environment.OSVersion.Platform)
{
case PlatformID.Win32NT:
case PlatformID.Win32S:
case PlatformID.Win32Windows:
var current = Environment.CurrentDirectory;
var probe = Path.Combine(Environment.Is64BitProcess ? "x64" : "x86");
while (current != null)
{
var ffmpegDirectory = Path.Combine(current, probe);
if (Directory.Exists(ffmpegDirectory))
{
Console.WriteLine($"FFmpeg binaries found in: {ffmpegDirectory}");
RegisterLibrariesSearchPath(ffmpegDirectory);
return;
}
current = Directory.GetParent(current)?.FullName;
}
break;
case PlatformID.Unix:
libraryPath = "/usr/lib/x86_64-linux-gnu";
RegisterLibrariesSearchPath(libraryPath);
break;
case PlatformID.MacOSX:
libraryPath = Environment.GetEnvironmentVariable(LD_LIBRARY_PATH);
RegisterLibrariesSearchPath(libraryPath);
break;
}
}


Файл FFmpeg.Autogen.dll.config














Подробнее здесь: https://stackoverflow.com/questions/554 ... mono-linux
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Вызовите Mono после завершения первого Mono и верните результат первого Mono.
    Anonymous » » в форуме JAVA
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Использование FFmpeg AutoGen для сохранения в растровое изображение работает в Windows, но не в Linux.
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить отмену Mono.zip, когда один Mono выдает исключение?
    Anonymous » » в форуме JAVA
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Как предотвратить отмену Mono.zip(), когда один Mono выдает исключение?
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как устранить рассинхронизацию библиотек классов Mono со средой выполнения Mono
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»