Node.js msnodesqlv8 模块未安装在 macOS ARM64 中
Node.js msnodesqlv8 module not installing in macOS ARM64
我正在使用 macOS 11.3.1 ARM64,我正在尝试使用 npm 在我的 node.js 项目中安装 msnodesqlv8
。我已经在 /opt/homebrew/bin/brew
中安装了我的自制程序,并且我已经使用以下命令为 SQLServer 安装了 brew ODBC 驱动程序:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools
我也unixodbc
安装了。
它似乎没有指向我的 /opt/homebrew/lib
(Library not loaded: /usr/local/opt/msodbcsql17/lib/libmsodbcsql.17.dylib
) 中的库
还有一个与 sqltypes.h
文件相关的问题。我做了很多研究,但 none 解决了我的问题。
这是输出:
prebuild-install WARN install dlopen(/Users/fdg/project/node_modules/msnodesqlv8/build/Release/sqlserverv8.node, 1): Library not loaded: /usr/local/opt/msodbcsql17/lib/libmsodbcsql.17.dylib
prebuild-install WARN install Referenced from: /Users/fdg/project/node_modules/msnodesqlv8/build/Release/sqlserverv8.node
prebuild-install WARN install Reason: image not found
CXX(target) Release/obj.target/sqlserverv8/src/ConnectionHandles.o
In file included from ../src/ConnectionHandles.cpp:1:
In file included from ../src/ConnectionHandles.h:22:
../src/stdafx.h:37:14: fatal error: 'sqltypes.h' file not found
#include <sqltypes.h>
^~~~~~~~~~~~
1 error generated.
make: *** [Release/obj.target/sqlserverv8/src/ConnectionHandles.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Darwin 20.4.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/fdg/project/node_modules/msnodesqlv8
gyp ERR! node -v v14.16.1
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! msnodesqlv8@2.1.0 install: `prebuild-install || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the msnodesqlv8@2.1.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
这些行在我的 .bash_profile
:
export PATH=/opt/homebrew/bin:$PATH
export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH
编辑:此外,我尝试创建指向自制程序库的符号链接。当 运行 sqlcmd 命令时,它说:
dyld: Library not loaded: /usr/local/lib/libodbc.2.dylib
Referenced from: /opt/homebrew/bin/sqlcmd
Reason: no suitable image found. Did find:
/opt/homebrew/lib/libodbc.2.dylib: mach-o, **but wrong architecture**
/opt/homebrew/Cellar/unixodbc/2.3.9_1/lib/libodbc.2.dylib: mach-o, but wrong architecture
M1 架构似乎还不支持 (?)。有什么解决方法吗?
如果需要任何额外的信息来帮助我弄清楚如何解决问题,请告诉我。
提前致谢
我解决了在 /usr/local
下使用我的终端在 Rosetta 下为 x86_64 架构创建第二个 brew 环境的问题。我重新安装了 mssql-tools
和 msodbcsql17
包,现在用 npm 重新安装 msnodesqlv8
模块,它成功了。
我们会等到 Microsoft 支持 ARM64 的 ODBC 驱动程序..
Microsoft 增加了对 Apple M1 芯片的支持。我仍然遇到这个问题。我能够通过在本地构建 msnodesqlv8 并更新 binding.gyp 文件来解决。找到 OS=="mac"
部分并将其更改为:
['OS=="mac"', {
'link_settings': {
'libraries': ['/opt/homebrew/lib/libodbc.a'],
},
'defines': [
'LINUX_BUILD',
'UNICODE'
],
'cflags_cc': [
'-std=c++1y'
],
'include_dirs': [
'/usr/local/include/',
'/usr/local/opt/msodbcsql17/include/',
'/usr/local/opt/msodbcsql17/include/msodbcsql17/',
'/opt/homebrew/include',
'/opt/homebrew/include/msodbcsql17'
],
}]
然后我能够构建,然后在我使用这个模块的项目中,我刚刚更新了 package.json 以指向这个本地版本。
Homebrew 将他们的 Apple 芯片包移动到 /opt/homebrew,因此我们正在更新链接器设置以指向正确的库 (/opt/homebrew/lib/libodbc.a
),然后添加 Homebrew 包含文件夹 (/opt/homebrew/include
和 /opt/homebrew/include/msodbcsql17
)。并确保 msodbcsql17 >= 17.8.1,因为这是支持 Apple ARM 平台的最早版本。
我正在使用 macOS 11.3.1 ARM64,我正在尝试使用 npm 在我的 node.js 项目中安装 msnodesqlv8
。我已经在 /opt/homebrew/bin/brew
中安装了我的自制程序,并且我已经使用以下命令为 SQLServer 安装了 brew ODBC 驱动程序:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools
我也unixodbc
安装了。
它似乎没有指向我的 /opt/homebrew/lib
(Library not loaded: /usr/local/opt/msodbcsql17/lib/libmsodbcsql.17.dylib
) 中的库
还有一个与 sqltypes.h
文件相关的问题。我做了很多研究,但 none 解决了我的问题。
这是输出:
prebuild-install WARN install dlopen(/Users/fdg/project/node_modules/msnodesqlv8/build/Release/sqlserverv8.node, 1): Library not loaded: /usr/local/opt/msodbcsql17/lib/libmsodbcsql.17.dylib
prebuild-install WARN install Referenced from: /Users/fdg/project/node_modules/msnodesqlv8/build/Release/sqlserverv8.node
prebuild-install WARN install Reason: image not found
CXX(target) Release/obj.target/sqlserverv8/src/ConnectionHandles.o
In file included from ../src/ConnectionHandles.cpp:1:
In file included from ../src/ConnectionHandles.h:22:
../src/stdafx.h:37:14: fatal error: 'sqltypes.h' file not found
#include <sqltypes.h>
^~~~~~~~~~~~
1 error generated.
make: *** [Release/obj.target/sqlserverv8/src/ConnectionHandles.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Darwin 20.4.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/fdg/project/node_modules/msnodesqlv8
gyp ERR! node -v v14.16.1
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! msnodesqlv8@2.1.0 install: `prebuild-install || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the msnodesqlv8@2.1.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
这些行在我的 .bash_profile
:
export PATH=/opt/homebrew/bin:$PATH
export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH
编辑:此外,我尝试创建指向自制程序库的符号链接。当 运行 sqlcmd 命令时,它说:
dyld: Library not loaded: /usr/local/lib/libodbc.2.dylib
Referenced from: /opt/homebrew/bin/sqlcmd
Reason: no suitable image found. Did find:
/opt/homebrew/lib/libodbc.2.dylib: mach-o, **but wrong architecture**
/opt/homebrew/Cellar/unixodbc/2.3.9_1/lib/libodbc.2.dylib: mach-o, but wrong architecture
M1 架构似乎还不支持 (?)。有什么解决方法吗?
如果需要任何额外的信息来帮助我弄清楚如何解决问题,请告诉我。
提前致谢
我解决了在 /usr/local
下使用我的终端在 Rosetta 下为 x86_64 架构创建第二个 brew 环境的问题。我重新安装了 mssql-tools
和 msodbcsql17
包,现在用 npm 重新安装 msnodesqlv8
模块,它成功了。
我们会等到 Microsoft 支持 ARM64 的 ODBC 驱动程序..
Microsoft 增加了对 Apple M1 芯片的支持。我仍然遇到这个问题。我能够通过在本地构建 msnodesqlv8 并更新 binding.gyp 文件来解决。找到 OS=="mac"
部分并将其更改为:
['OS=="mac"', {
'link_settings': {
'libraries': ['/opt/homebrew/lib/libodbc.a'],
},
'defines': [
'LINUX_BUILD',
'UNICODE'
],
'cflags_cc': [
'-std=c++1y'
],
'include_dirs': [
'/usr/local/include/',
'/usr/local/opt/msodbcsql17/include/',
'/usr/local/opt/msodbcsql17/include/msodbcsql17/',
'/opt/homebrew/include',
'/opt/homebrew/include/msodbcsql17'
],
}]
然后我能够构建,然后在我使用这个模块的项目中,我刚刚更新了 package.json 以指向这个本地版本。
Homebrew 将他们的 Apple 芯片包移动到 /opt/homebrew,因此我们正在更新链接器设置以指向正确的库 (/opt/homebrew/lib/libodbc.a
),然后添加 Homebrew 包含文件夹 (/opt/homebrew/include
和 /opt/homebrew/include/msodbcsql17
)。并确保 msodbcsql17 >= 17.8.1,因为这是支持 Apple ARM 平台的最早版本。