Как использовать сторонний dll, заголовок и файл lib с Node N-API - PullRequest
0 голосов
/ 05 июня 2018

Мне выданы все соответствующие файлы для использования d ++ c ++:

  • заголовочный файл
  • lib file
  • dll

Я пытаюсь использовать Node N-API с указанными файлами, чтобы мы могли использовать эту библиотеку c ++ на нашем сервере узлов.

Проблема заключается в том, что при попытке собрать сnode-gyp выдает следующую ошибку:

LINK : fatal error LNK1181: cannot open input file 'lib\MathUtils.lib' [C:\Development\Github\node-thin-client\service\build\interface.vcxproj]

Используемая версия узла: 8.11.2

Версия node-gyp: 3.6.2

Мой файл binding.gyp выглядит следующим образом:

{
  "variables": {
    "dll_files": [
      "lib/MathUtils.dll"
    ]
  },
  "targets": [
    {
      "target_name": "interface",
      "sources": [
        "src/interface/interface.cpp"
      ],
      "include_dirs": [
        "<!@(node -p \"require('node-addon-api').include\")",
        "include"
      ],
      "dependencies": [
        "<!(node -p \"require('node-addon-api').gyp\")"
      ],
      "libraries": [
        "lib/MathUtils.lib"
      ],
      "cflags!": ["-fno-exceptions"],
      "cflags_cc!": ["-fno-exceptions"],
      "defines": ["NAPI_CPP_EXCEPTIONS"]
    }
  ]
}

1 Ответ

0 голосов
/ 25 января 2019

Я столкнулся с подобными проблемами.Я вижу, что это было какое-то время, но в случае, если кто-то столкнется с этим при создании плагина узла, который ссылается на другие библиотеки DLL, вот что я сделал:

Вы получаете ошибку ссылки, потому что файл проекта генерируется вкаталог ./build в вашем проекте, но вы ссылаетесь на ./lib/MathUtils.lib.Если вы откроете сгенерированный проект .sln в Visual Studio, вы увидите проблему.Таким образом, вы можете сделать:

"libraries": [../lib/MathUtils.lib"] 

или

"libraries": [ "<(module_root_dir)/lib/MathUtils.lib" ]

Обратите внимание, сначала относительный путь идет вверх на один каталог.Второй поместит полный путь в строку компоновщика проекта.

Также для меня раздел variables не скопировал dll в каталог релиза, он, похоже, ничего не делал.Вместо этого я использовал раздел копий:

     "conditions": [        
        ["OS==\"win\"", {
          "libraries": [ "<(module_root_dir)/tsflexnet/TSFlexnetCLib.lib" ],
          "copies": [
            {
              "destination": "<(module_root_dir)/build/Release/",
              "files": [ "<(module_root_dir)/tsflexnet/TSFlexnetCLib.dll" ]
            }
          ]
        }]
      ]
...