glibc找不到符号错误

时间:2016-06-30 23:19:49

标签: node.js docker oracle11g glibc node-oracle

最近,我开始使用Docker来运行我的Node项目,并希望添加Oracle即时客户端驱动程序。据我所知,Oracle即时客户端驱动程序是针对glibc库编译的,而基于Alpine的Docker镜像包含musl库。

所以我需要一种方法来包含glibc库,我偶然发现docker-glibc-builderglibc库打包为压缩包。

glibc库包含到容器中后,当我的Node项目将Oracle称为即时驱动程序时,我开始注意到以下错误。

Error: Error relocating /opt/oracle/drivers/instantclient/libclntsh.so.11.1: getcontext: symbol not found
    at Error (native)
    at Object.Module._extensions..node (module.js:568:18)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (node_modules/oracledb/lib/oracledb.js:32:19)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (node_modules/oracledb/index.js:1:80)

有人遇到这样的错误吗?

1 个答案:

答案 0 :(得分:2)

  

所以我需要一种方法来包含glibc库

请注意,您可以在一个进程中混合和匹配两个单独的libc库。您必须选择其中一个。此外,您必须构建针对您将在运行时使用的相同库(仅包括Docker镜像中的运行时包)是不够的。

According to musl wiki,musl不提供getcontext。你得到的错误与你继续使用musl而不是glibc一致。