无法加载模块 libdb2.a(shr.o)

Posted

技术标签:

【中文标题】无法加载模块 libdb2.a(shr.o)【英文标题】:Could not load module libdb2.a(shr.o) 【发布时间】:2014-10-20 00:09:00 【问题描述】:

我有一个依赖于 libdb2.a 的 C 可执行文件。然而,当调用可执行文件时,弹出以下错误:

exec(): 0509-036 Cannot load program /my/path/my_c_exe because of the following errors:
        0509-150   Dependent module libdb2.a(shr.o) could not be loaded.
        0509-022 Cannot load module libdb2.a(shr.o).
        0509-026 System error: A file or directory in the path name does not exist.

后来发现应该在我家目录的.profile文件中添加如下env设置:

LIBPATH=/db2/v84bc/sqllib/lib64
export LIBPATH

是的,问题已解决。但是我仍然对原始错误感到困惑,因为静态库libdb2.a 应该在编译时构建到c 可执行文件/my/path/my_c_exe 中。可执行文件不应该一直在寻找它在运行时所依赖的静态库,不是吗?如果 db2 是共享对象,我可以看到其中的原因。但是对于静态库,错误超出了我的理解。

有关此错误原因的任何提示?或者,虽然libdb2.a 被命名为静态库,但它实际上是一个共享对象?除了查看后缀(.a 或 .so)之外,如何确定库是静态库还是共享库?

【问题讨论】:

【参考方案1】:

您对表示静态库的后缀.a 的假设不正确。按照约定,.a 是共享库的后缀,它可以包含共享和静态对象,两者都具有后缀.o。对象是共享的还是静态的,在其 XCOFF 标头中指示。

更多信息in the manual。

【讨论】:

感谢您的回答。你知道如何查看libdb2.a的XCOFF header吗? 您有机会查看我在答案中包含的链接吗? 谢谢你的提醒,mustaccio。我确实检查了您答案中的链接,但不够仔细。现在我重新检查了文章,发现查看库头的命令是dump -ov

以上是关于无法加载模块 libdb2.a(shr.o)的主要内容,如果未能解决你的问题,请参考以下文章

如何解决scala ide 找不到或无法加载主类

关于Thinkphp中“无法加载模块”的报错

无法加载模块

无法将反应模块加载为节点模块

Webpack:无法解析模块“文件加载器”

无法使用 RequireJs 加载 Dojo 模块