使用 node-gyp 链接 arch 特定位置
Linking against arch specific locations with node-gyp
我正在尝试构建一个链接到第 3 方共享库的本机 Node.js 模块。该库作为捆绑包的一部分提供,该捆绑包包括不同目录中针对不同操作系统和体系结构的预构建版本。
例如
/opt/Foo/linux/x86/lib/libfoo.so
/opt/Foo/linux/x86/include/foo.h
/opt/Foo/linux/x86_64/lib/libfoo.so
/opt/Foo/linux/x86_64/include/foo.h
/opt/Foo/linux/arm/lib/libfoo.so
/opt/Foo/linux/arm/include/foo.h
/opt/Foo/mac/x86_64/lib/libfoo.so
/opt/Foo/mac/x86_64/include/foo.h
我的 binding.gyp 目前是这样的:
{
'targets': [
{
'target_name': 'foo',
'sources': ['foo.cpp', 'foo.h'],
'include_dirs': ["<!(node -e \"require('nan')\")"],
'conditions': [
['OS=="mac"', {
'include_dirs': ['/opt/Foo/mac/x86_64/include'],
'libraries': ['-L/opt/Foo/mac/x86_64/lib', '-lfoo']
}
],
['OS=="linux"', {
'include_dirs': ['/opt/Foo/linux/x86_64/include'],
'libraries': ['-L/opt/Foo/linux/x86_64/lib', '-lfoo']
}
]
]
}
]
}
我似乎无法找到 conditions
的语法来区分当前的平台架构。
由于没有找到任何其他解决方案,我提出了以下解决方案:
...
['OS=="linux"', {
'include_dirs': ["<!(node -e \"console.log('/opt/Foo/linux/%s/include',require('process').arch);\")"],
'libraries': ["<!(node -e \"console.log('-L/opt/Foo/linux/%s/lib',require('process').arch);\")", '-lfoo']
}
]
...
我不得不将 /opt/Foo/Linux/x86_64
目录重命名为 /opt/Foo/Linux/x64
以匹配 process.arch 的输出。
我正在尝试构建一个链接到第 3 方共享库的本机 Node.js 模块。该库作为捆绑包的一部分提供,该捆绑包包括不同目录中针对不同操作系统和体系结构的预构建版本。
例如
/opt/Foo/linux/x86/lib/libfoo.so
/opt/Foo/linux/x86/include/foo.h
/opt/Foo/linux/x86_64/lib/libfoo.so
/opt/Foo/linux/x86_64/include/foo.h
/opt/Foo/linux/arm/lib/libfoo.so
/opt/Foo/linux/arm/include/foo.h
/opt/Foo/mac/x86_64/lib/libfoo.so
/opt/Foo/mac/x86_64/include/foo.h
我的 binding.gyp 目前是这样的:
{
'targets': [
{
'target_name': 'foo',
'sources': ['foo.cpp', 'foo.h'],
'include_dirs': ["<!(node -e \"require('nan')\")"],
'conditions': [
['OS=="mac"', {
'include_dirs': ['/opt/Foo/mac/x86_64/include'],
'libraries': ['-L/opt/Foo/mac/x86_64/lib', '-lfoo']
}
],
['OS=="linux"', {
'include_dirs': ['/opt/Foo/linux/x86_64/include'],
'libraries': ['-L/opt/Foo/linux/x86_64/lib', '-lfoo']
}
]
]
}
]
}
我似乎无法找到 conditions
的语法来区分当前的平台架构。
由于没有找到任何其他解决方案,我提出了以下解决方案:
...
['OS=="linux"', {
'include_dirs': ["<!(node -e \"console.log('/opt/Foo/linux/%s/include',require('process').arch);\")"],
'libraries': ["<!(node -e \"console.log('-L/opt/Foo/linux/%s/lib',require('process').arch);\")", '-lfoo']
}
]
...
我不得不将 /opt/Foo/Linux/x86_64
目录重命名为 /opt/Foo/Linux/x64
以匹配 process.arch 的输出。