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

时间:2014-08-26 15:30:15

标签: c db2 aix

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

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 个答案:

答案 0 :(得分:1)

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

更多信息in the manual