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

标签 c db2 aix

我有一个依赖于 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 中添加以下环境设置:

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

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

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

最佳答案

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

更多信息in the manual .

关于无法加载模块 libdb2.a(shr.o),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509673/

相关文章:

c++ - 将具有结构初始化和赋值的 C 代码移至 C++ 编译器

c# - 通过 ODBC 传递 null

SQLRPGLE。我的 SQL 查询有问题吗?

c - perfstat_process 未在 AIX 6.1 上的 libperfstat.h 中声明

java - 将 Shrinksafe 与 IBM JRE 结合使用时出现 MalformedInputException

iphone - 理解 Objective-C 中的@Protocols

c - C 中的 realloc 函数导致 "realloc(): invalid pointer:"错误

C++ - 相当于 C 中未完全初始化的数组?

db2 - 有没有办法获取 RPGLE/DB2 SQL 中的 SQLSTT 错误描述以获得更多信息性错误消息?

IBM JVM (AIX) 的 Java UTF-8 文件名