我有一个依赖于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标头中指示对象是共享对象还是静态对象。
更多信息in the manual。