HP-UX动态连接库的查找路径问题
我使用的系统是HP-UX11.23,使用的编译工具是aCC。编译环境以及编译出的程序均为64bit。
我写了一个小例子,两个文件分别是say.c和test.c。
say.c:
1 #include <stdio.h>
2 void say()
3 {
4 printf("say!n");
5 }
test.c:
1 void say();
2 int main()
3 {
4 say();
5 return 0;
6 }
Makefile:
1 a.out:test.c say.so
2 aCC +DD64 say.so test.c
3 say.so:say.o
4 aCC +DD64 -b say.o -o say.so
5 say.o : say.c
6 aCC +DD64 +z -c say.c
7 clean :
8 rm *.out *.o *.so
执行make以后,生成可执行文件a.out。如果在当前目录下运行,没有问题。如果到别的目录下运行a.out,就会报告说找不到say.so文件。
我设置了LD_LIBRARY_PATH)=say.so所在的文件夹后,仍然不起作用。
已经调查了整整两天了,不知道是何原因,请指点一下吧。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
a.out的属性如下:
$ chatr a.out
a.out:
64-bit ELF executable
shared library dynamic path search:
LD_LIBRARY_PATH enabled first
SHLIB_PATH enabled second
embedded path enabled third /opt/aCC/lib/hpux64:/usr/lib/hpux64:/opt/langtools/lib/hpux64
shared library list:
./say.so
libstd_v2.so.1
libCsup.so.1
libm.so.1
libunwind.so.1
libc.so.1
libdl.so.1
动态共享库的搜索路径以及优先顺序都说的很明白,环境变量LD_LIBRARY_PATH我也设置了,就是不起作用。
查看a.out的依赖关系,如下所示:
$ ldd -s a.out
find library=./say.so; required by a.out
./say.so => ./say.so
指向的是当前目录下的say.so。无论在哪个目录下运行a.out,必须在当前目录下存在say.so才行,否则就会报告找不到say.so。