Статическое связывание библиотек FFmpeg с собственным дополнением к узлу C ++ - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь запустить аддон узла, который связывается с библиотеками без необходимости включать их динамическую библиотеку .dll:

Когда я пытаюсь включить их статический архив: .dll.a расширение в Windows, аддон узла возвращает ошибку:

$ node index.js --client 
internal/modules/cjs/loader.js:840 
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: The specified procedure could not be found.

Обычно это означает, что он ожидал загрузить какую-то другую функцию из библиотеки, но не смог ее найти. Если есть способ отладить это сообщение об ошибке более конкретно, я также хотел бы знать, как!

Я пытался изменить порядок библиотек, использовать разные расширения и т. Д.

Первоначально я использовал только расширение .lib вместо расширений .dll.a, и программа отлично работает, если я включаю .dll.

Код работает нормально, если я использую .lib файлы и помещаю их соответствующие .dll в тот же каталог, что и приложение, которое я выполняю.

Я использовал эти ресурсы:

Я использую N-API, и вот что я делаю в binding.gyp:

'libraries': [
            "ws2_32.lib",

            "C:\\Users\\$(username)\\Desktop\\workspace\\ffmpeg-win64-dev\\lib\\libavcodec.dll.a",
            "C:\\Users\\$(username)\\Desktop\\workspace\\ffmpeg-win64-dev\\lib\\libavutil.dll.a",
            "C:\\Users\\$(username)\\Desktop\\workspace\\ffmpeg-win64-dev\\lib\\libswresample.dll.a",

Я ожидаю, что мое приложение (node index.js --client) будет работать правильно без необходимости .dlls, которую я должен был включить в прошлом.

EDIT

Вполне возможно, что эта проблема так же проста, как: Как вы статически связываете эти библиотеки FFmpeg в Windows и не имеют ничего общего с конкретным узлом.

...