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

C 无法加载模块libdb2.a(shr.o),c,db2,aix,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

我有一个依赖于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可执行文件中。可执行文件不应该在运行时寻找它所依赖的静态库,是吗?如果db2是一个共享对象,那么我可以看到其基本原理。但是对于一个静态库,这个错误超出了我的理解


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

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


更多信息。

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