当前位置: 技术问答>linux和unix
紧急求救:如何让应用程序在当前目录下链接共享库so?
来源: 互联网 发布时间:2016-02-20
本文导语: 写了如下makefile: OUTDIR:=home/my/sbin LIBDIR:=/home/my/sbin LIBS:=$(LIBDIR)/a.so $(LIBDIR)/b.so $(LIBDIR)/c.so //{{这些内容省略 ...... ...... ....... //}} test.out: $(OBJS) g++ $^ -o $(OUTDIR)/$@ $(LIBS) 程序test.out输出在home/my/sbin下,它运行是...
写了如下makefile:
OUTDIR:=home/my/sbin
LIBDIR:=/home/my/sbin
LIBS:=$(LIBDIR)/a.so $(LIBDIR)/b.so $(LIBDIR)/c.so
//{{这些内容省略
......
......
.......
//}}
test.out: $(OBJS)
g++ $^ -o $(OUTDIR)/$@ $(LIBS)
程序test.out输出在home/my/sbin下,它运行是依赖同一个目录下的共享库a.so,b.so,c.so;编译成功后test.out可以正确运行;但是把test.out,a.so,b.so,c.so剪切到另外一个目录下,就不能正确运行了,提示找不到home/my/sbin下的a.so,b.so,c.so;请问makefile中怎么样写,才能让test.out总是在自己当前目录下找a.so,b.so,c.so?
请高手指教,谢谢了!
OUTDIR:=home/my/sbin
LIBDIR:=/home/my/sbin
LIBS:=$(LIBDIR)/a.so $(LIBDIR)/b.so $(LIBDIR)/c.so
//{{这些内容省略
......
......
.......
//}}
test.out: $(OBJS)
g++ $^ -o $(OUTDIR)/$@ $(LIBS)
程序test.out输出在home/my/sbin下,它运行是依赖同一个目录下的共享库a.so,b.so,c.so;编译成功后test.out可以正确运行;但是把test.out,a.so,b.so,c.so剪切到另外一个目录下,就不能正确运行了,提示找不到home/my/sbin下的a.so,b.so,c.so;请问makefile中怎么样写,才能让test.out总是在自己当前目录下找a.so,b.so,c.so?
请高手指教,谢谢了!
|
Unix为了安全,除非用户指定,否在不会在当前路径搜索执行文件和动态库的。
举个例子来说。如果楼主用root登录/(或者su),到tom的目录下用ls查看他的问文件,如果tom在他的某个目录下放一个ls的客脚本,里面写了rm -rf /*, 这个系统就完了。
对于共享库存在同样的危险。
只有MS的操作系统根本不考虑安全问题,才会在当前目录下搜索执行文件和动态库。
举个例子来说。如果楼主用root登录/(或者su),到tom的目录下用ls查看他的问文件,如果tom在他的某个目录下放一个ls的客脚本,里面写了rm -rf /*, 这个系统就完了。
对于共享库存在同样的危险。
只有MS的操作系统根本不考虑安全问题,才会在当前目录下搜索执行文件和动态库。
|
可以把 export LD_LIBRARY_PATH ....放到.profile文件中,再重新登陆下,以后再登陆以可以直接g++......了.