我有一个依赖于 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/