Библиотека Node-gyp не загружена: /usr/local/lib/libmtp.9.dylib

Я пытался создать надстройку nodejs-native-addon, которая использует libmtp для выполнения определенных функций. Мне удалось создать приложение, но приложение бросаетLibrary not loaded: /usr/local/lib/libmtp.9.dylib. Referenced from: /path/build/Debug/nbind.node. Reason: image not found ошибка, когда я пытаюсь запустить его на другом MacBook, где не установлен libmtp.

Это мой файл binding.gyp:

{
  "targets": [
    {
      "includes": [
        "auto.gypi"
      ],
      "sources": [
        "src/native/mtp.cc"
      ],
      "link_settings": {
        "libraries": [
            "-lmtp"
        ],
      },
    }
  ],
  "includes": [
    "auto-top.gypi"
  ],
}

Я даже попытался включить файл dylib в опцию библиотеки

"link_settings": {
    "libraries": [
      "<(module_root_dir)/src/native/lib/libmtp.9.dylib"
    ]
}

но приложение не запускается с Library not loaded: /usr/local/lib/libmtp.9.dylib. Referenced from: /path/build/Debug/nbind.node. Reason: image not found ошибка.

Любая помощь будет оценена по достоинству.

2 ответа

Ошибка указывает на то, что библиотека libmtp.9.dylib не может быть найден в стандартной библиотеке включить путь /usr/local/lib Попробуйте установить переменную среды LD_LIBRARY_PATH указать на место, где у вас есть libmtp.9.dylib перед запуском узла.

Одним из решений было бы создать символическую ссылку в известном rpath, например вручную в вашу встроенную библиотеку. Не идеально, но он может предоставить обходной путь, по крайней мере, для успешных сборок в разработке.

      ln -s <absolute_path>/src/native/lib/libmtp.9.dylib /usr/local/lib/libmtp.9.dylib 

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

Другие вопросы по тегам