为了简化交叉编译的sysroot生成,我生成了一个带有相对符号链接的tar文件。
如果我用
打印tar上下文tar tvf sysroot-libc6-dev.tar
然后我得到了正确的结果:
lrw-r--r-- jens/jens 1 2018-03-30 23:42 usr/lib/x86_64-linux-gnu/libBrokenLocale.so -> ../../../lib/x86_64-linux-gnu/libBrokenLocale.so.1
lrw-r--r-- jens/jens 1 2018-03-30 23:42 usr/lib/x86_64-linux-gnu/libanl.so -> ../../../lib/x86_64-linux-gnu/libanl.so.1
lrw-r--r-- jens/jens 1 2018-03-30 23:42 usr/lib/x86_64-linux-gnu/libcidn.so -> ../../../lib/x86_64-linux-gnu/libcidn.so.1
如果我用
解压缩tar档案tar xvf sysroot-libc6-dev.tar
然后符号链接是绝对的,这是一个烂摊子,因为那时sysroot目录指向我的主机并且交叉编译将不起作用。
ls -al
lrwxrwxrwx 1 jens jens 33 Jan 14 11:39 libanl.so -> /lib/x86_64-linux-gnu/libanl.so.1
lrwxrwxrwx 1 jens jens 42 Jan 14 11:39 libBrokenLocale.so -> /lib/x86_64-linux-gnu/libBrokenLocale.so.1
lrwxrwxrwx 1 jens jens 34 Jan 14 11:39 libcidn.so -> /lib/x86_64-linux-gnu/libcidn.so.1
脚本的目的是保持所有相关内容,也包括链接器脚本,例如: libc.so将被修补到相关链接。
提前致谢
Jens Riebold
答案 0 :(得分:0)
我发现了帖子的问题。仅当符号链接的目标也在tar存档中时,tar才会设置相对链接。
对树莓派进行交叉编译的问题是库的绝对符号链接和ld脚本中的绝对路径。 (SO档案)。
如果您将preberry库从raspberry pi复制到您的交叉编译项目中,那么您必须解决这个问题。在我的项目工作中花了一些时间来理解奇怪的链接器问题。
该项目的工作原理如下:
Handler handler = new Handler();
button2.setVisibility(View.GONE);
Runnable runnable = new Runnable() {
@Override
public void run() {
button2.setVisibility(View.VISIBLE);
}
}
// run runnable after 5 seconds
handler.postDelayed(runnable, 5000);
输出是一个tar文件,在ld脚本中包含相对链接和相对路径。
示例:
sync_package.pl <debian package name>
输出:
sync_package.pl libmodbus-dev