为什么 GLFW3 在使用 nw-gyp 构建时无法链接符号而不是 VS2019

发布于 2025-01-09 09:28:00 字数 2097 浏览 1 评论 0原文

我正在尝试在 C++ Node.js 插件中使用 Vulkan 来与 NW.js 一起使用。使用 VS2019 本地调试器,程序可以构建并运行良好,但使用 node-gyp 或特别是 nw-gyp 构建时。 GLFW3 无法链接其多个功能。

链接器错误

由于 GLFW3 是一个 C 库,我还应用了此处列出的 MSVS 的解决方法:https://github.com/nodejs/help/issues/2250 GLFW3 在其头文件中默认具有 extern“C”宏。它包含在“_cplusplus”中,但 MSVC 似乎在这里支持它: https://learn.microsoft.com/ en-us/cpp/预处理器/预定义宏?view=msvc-170 如果我没有记错的话,这些错误似乎有“损坏的”符号名称,这在 C 中不应该发生。 除此之外,我已经尝试过:

  1. 重新排列 Gyp 文件中列出的顺序库,以防出现加载顺序问题。
  2. 指定 C++17 ,因为 Vulkan API 似乎在其教程中使用它。
  3. 对除节点 api 之外的所有库使用绝对路径。
  4. 指定使用MSVC2015。
  5. 删除除 GLFW3 之外的所有内容,留下 1 次对 GLFW3 的调用以确保编译器不会删除它。
  6. 创建一个仅包含第一个 Vulkan 设置 (Windows) 的空项目,如下所示:https://vulkan-tutorial.com /Development_environment
  7. 添加此答案中的“fno-exception”标志:使用 boost (或任何其他库)构建 NodeJs 模块就此而言)

下面是我的 binding.gyp

在此处输入图像描述

vulkTest.cpp,包含与 Vulkan 网站上的监听相同的 Vulkan 测试代码。 cpp 为空,testGreeting.cpp 包含一个仅返回 std::string 的函数,

我正在使用 MSVC 编译器、Visual Studio 2019。Windows 10。我只能猜测,无论出于何种原因,GLFW3 是。尽管采取了防止这种情况的措施,但仍被视为 C++ 库。

nw-gyp: https://github.com/nwjs/nw-gyp

GLFW3:< a href="https://github.com/glfw/glfw" rel="nofollow noreferrer">https://github.com/glfw/glfw

NW.js 是版本29.4 : https://github.com/nwjs/nw.js

如果我错过了什么,我很乐意添加所需的信息。

I'm trying to use Vulkan in a C++ Node.js plugin to use with NW.js. using the VS2019 Local debugger, the program builds and runs fine but when building with node-gyp or specifically, nw-gyp. GLFW3 fails to link several of its functions.

Linker Errors

due to GLFW3 being a C library, Ive also applied the working around for MSVS listed here: https://github.com/nodejs/help/issues/2250 GLFW3 has the extern "C" macro by default in its header file. its wrapped in the "_cplusplus" but MSVC seem to support it here:
https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-170
if I'm not mistaken the errors seem to have "mangled" symbols names which isn't supposed to happen in C.
apart from that I've tried:

  1. Rearranging the order libraries are listed in the Gyp file, just in case its a load order issue.
  2. specifying C++17 , as the Vulkan API seems to use it in their tutorial.
  3. Use absolute paths for all libraries except for the node api.
  4. specify to use MSVC2015.
  5. remove everything except for GLFW3, leaving 1 call to GLFW3 to ensure the compiler doesn't remove it.
  6. Make an empty project containing only the very first Vulkan setup (Windows) seen here: https://vulkan-tutorial.com/Development_environment
  7. Adding the "fno-exception' flags from this answer: Building NodeJs module with boost (or any other library for that matter)

Below is my binding.gyp

enter image description here

vulkTest.cpp, contains the Vulkan test code identical to that listen on the Vulkan website. index.cpp is empty, testGreeting.cpp contains a function that simply returns a std::string.

I'm using the MSVC compiler, Visual Studio 2019. Windows 10. I can only guess that for whatever reason GLFW3 is being treated as a C++ library despite the measures taken to prevent that.

nw-gyp: https://github.com/nwjs/nw-gyp

GLFW3: https://github.com/glfw/glfw

NW.js is version 29.4 : https://github.com/nwjs/nw.js

If I missed something, Ill happily add the required information.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

中性美 2025-01-16 09:28:00

一件简单的尝试就是将全局 Node 版本设置为与 NW.js 内置的版本相匹配。

在您的例子中,您使用的是 NW.js 0.29.4,它随 Node 9.11.1 一起提供。

如果您已经全局安装了 Node,我会卸载它,然后安装 nvm-windows 并使用它来安装并切换到该版本的 Node.js。

另外请确保您已安装 Python 2。我很确定如果您将 C:\Python27 添加到您的 PATH 中就没有问题。但如果你也有 Python 3,你可能想用 google 搜索一下。

然后删除您的 node_modulespackage-lock.json 并再次尝试 npm install

有关 NW-GYP 的更多详细信息:

如果这不起作用,那么我不确定问题可能是什么,这只是一个很好的第一尝试。

One easy thing to try is to set your global Node version to match the same one built in to NW.js.

In your case, you are using NW.js 0.29.4, which comes with Node 9.11.1.

If you have Node globally installed already, I'd uninstall it, then install nvm-windows and use that to install and switch to that version of Node.js.

Also make sure you have Python 2 installed. I'm pretty sure if you have C:\Python27 added to your PATH you're fine. But you may want to google that if you have Python 3 also.

Then delete your node_modules and package-lock.json and try npm install again.

More details on NW-GYP:

If that doesn't work, then I'm not sure what the issue could be, this is just a good first thing to try.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文