在使用qvfb做framebuffer模拟的时候,发现几个问题:第一个就是Ubuntu的确不专业,没有很多库的支持,最好使用RedHat,Fedora之类的发行版本,这样会少很多编译之类的麻烦.
由于在Ubuntu下编译qvfb缺少了很多库文件,而在没有网络的情况下,补齐这些库和头文件是非常麻烦的,所以准备在fedora中编译好后再放到Ubuntu中使用.由于Ubuntu和fedora下qtsdk的安装不一致,从而发现fedora下编译好的qvfb放到Ubuntu下执行,发现找不到库.
利用strace工具看一下这个过程,因为是在fedora下编译的,所以makefile中的链接选项有指明链接库的地址-rpath,这个地址就是sdk安装目录下的库目录.
所以在fedora下直接打开这个目录,加载相应的库文件.而在Ubuntu下sdk的安装目录不一致,系统的库搜索路径又没有这个库,所以执行肯定会报错.在Ubuntu下strace下这个过程,就会发现有很多open /usr/lib之类的操作.
man ld,该文档中给出了共享库的系统路径和查找优先级:
The linker uses the following search paths to locate required
shared libraries:
1. Any directories specified by -rpath-link options.
2. Any directories specified by -rpath options. The difference
between -rpath and -rpath-link is that directories specified by
-rpath options are included in the executable and used at
runtime, whereas the -rpath-link option is only effective at