Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1264385
  • 博文数量: 404
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 5382
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 16:29
文章存档

2010年(40)

2009年(140)

2008年(224)

我的朋友

分类: LINUX

2008-12-19 14:05:32

我交叉编译程序时,这样进行:
export LDFLAGS="-Wl,--rpath-link -Wl,/work/crossbuild"
./configure --host=arm-linux --prefix=/work/crossbuild
make
make install

然后把编译得到的可执行程序放到单板/usr/bin目录下,
把/work/crossbuild中的库放到单板/usr/lib目录下。

程序可以正常启动,但是使用strace查看发现它首先会去/work/crossbuild/lib
查找库文件,我想禁止它查找这个目录。

在编译时,看到很多"-rpath /work/crossbuild/lib"为信息,这表明把
/work/crossbuild/lib目录名编进程序中去了,手工去除-rpath实在艰难,
不知道有什么好方法?
 
 
试一下在板上显式地设置LD_LIBRARY_PATH,在/etc/init.d/rcS中加入:

export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

再strace
 
 
 
运行时库的查找路径及优先顺序如下:
① 编译程序时使用“-rpath”指定的目录;
② 环境变量LD_LIBRARY_PATH指定的目录(它可以指定多个目录,以冒号分隔);
③ 文件/etc/ld.so.cache中指定的目录,这个文件是ldconfig程序读取/etc/ld.so.conf文件生成的;
④ 默认路径:/lib、/usr/lib。

可以使用chrpath工具修改编译好的程序的-rpath目录;
更好的方法是使用scratchbox等工具进行编译,
它就相当于在目本板上编译程序,
直接安装在/usr、/usr/lib等目录(这些目录不是主机的/usr、/usr/lib目录)下。
阅读(1686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~