Статическое связывание библиотек ffmpeg с собственным дополнением к узлу C++
Я пытаюсь запустить аддон узла, который ссылается на библиотеки без необходимости включать их динамическую библиотеку.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 в тот же каталог, что и приложение, которое я выполняю.
Я использовал эти ресурсы:
- .lib являются заглушками на время компиляции и не решают проблему: программа статически связана с библиотекой, но для запуска все еще требуется dll
- Литература о файлах.dll.a: MinGW создает файлы dll.a? Что это за файлы библиотеки?
- Статическая ссылка ffmpeg: https://fritzone.wordpress.com/2010/05/11/link-with-static-ffmpeg/ но у ffmpeg-dev нет файлов.a, есть файлы.dll.a и я Я уже пробую этот маршрут.
Я использую 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
) для правильной работы без необходимости.dll, которые я должен был включить в прошлом.
РЕДАКТИРОВАТЬ
Возможно, эта проблема так же проста, как: Как вы статически связываете эти библиотеки FFmpeg в Windows и не имеете ничего общего с конкретным узлом.