javascript - Node C++ 扩展仅在 docker 中加载 Google Compute Engine 上的段错误

标签 javascript c++ node.js docker google-compute-engine

我在 Google Compute Engine 上使用 docker container + node 时遇到了一个非常奇怪的行为。 设置如下:

  1. 我有一个 docker 镜像被推送到私有(private) docker registry
  2. 此镜像是在 ubuntu 12.04 之上创建的(来自 ubuntu:12.04)
  3. 我正在运行的代码是带有 C++ 扩展的 javascript Node 代码。
  4. C++ 扩展包含自定义 C++ 代码以及动态链接库(boost、blas、armadillo 等...)

我尝试在许多不同的机器(本地和 AWS 上的不同实例大小)上运行带有 Node 代码 + 扩展的 docker 容器。

当我在 GCE 上启动完全相同的容器时出现段错误。它在不同的机器和不同的操作系统上崩溃。

这是我使用 tool 时得到的输出(我从容器内部运行命令):

/opt/th/api# node start.js 
PID 118 received SIGSEGV for address: 0x7f1c7faab000
/opt/th/api/node-segfault-handler/build/Release/segfault_handler.node(+0x100d)  [0x7f1c8b2fa00d]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7f1c8b8cbcb0]
/usr/lib/libblas.so(+0x3d6fd8)[0x7f1c89229fd8]
/usr/lib/libblas.so(blas_memory_alloc+0x34d)[0x7f1c8922a70d]
/usr/lib/libblas.so(gotoblas_init+0x30)[0x7f1c88efb120]
/lib64/ld-linux-x86-64.so.2(+0xf306)[0x7f1c8c70a306]
/lib64/ld-linux-x86-64.so.2(+0xf3df)[0x7f1c8c70a3df]
/lib64/ld-linux-x86-64.so.2(+0x13ada)[0x7f1c8c70eada]
/lib64/ld-linux-x86-64.so.2(+0xf176)[0x7f1c8c70a176]
/lib64/ld-linux-x86-64.so.2(+0x1331a)[0x7f1c8c70e31a]
/lib/x86_64-linux-gnu/libdl.so.2(+0xf26)[0x7f1c8c4f7f26]
/lib64/ld-linux-x86-64.so.2(+0xf176)[0x7f1c8c70a176]
/lib/x86_64-linux-gnu/libdl.so.2(+0x152f)[0x7f1c8c4f852f]
/lib/x86_64-linux-gnu/libdl.so.2(dlopen+0x31)[0x7f1c8c4f7fc1]
node(uv_dlopen+0x30)[0x966000]
node(_ZN4node6DLOpenERKN2v89ArgumentsE+0xee)[0x818bfe]
node[0x5c7c0b]
[0xf956706362]

有没有人见过这样的事情? 它看起来像一个动态链接问题。但为什么我只能在 GCE 上看到它,而在其他任何地方都看不到?

最佳答案

更新

经过长时间与这个问题的斗争,我找到了一个解决方案,通过使用不同版本的 blas 重建容器。我安装了 atlas 包(libatlas-dev libatlas-base-dev),用它重新编译,重建容器,并且不再有段错误了。 仍然:不知道为什么以前的容器不能在 GCE 上运行(而它在 AWS 上运行得很好)...

关于javascript - Node C++ 扩展仅在 docker 中加载 Google Compute Engine 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708047/

相关文章:

javascript - 如何生成随机数但不是整数而不是像 1.2321312312

c++ - 在 win32 C++ 编程中如何复制窗口样式?

javascript - Sails Js View 引擎是否支持布局部分?

json - 使用 package.json 文件或不使用 package.json 文件安装 Express 时出错

javascript - Jquery 获取使用 ajax 创建的元素

javascript - 如何将 font-awesome CSS 嵌入 DOM 脚本 (javascript)?

javascript - 如何用react读取cookie?

c++ - FileSink、StringSink、Filesource、StringSource Crypto++ 之间有什么区别

c++ - LPCSTR 在 CLR 项目中创建未声明的变量

node.js - 计算日期范围的重叠量