Tar将相对符号链接更改为绝对符号链接

时间:2018-03-30 22:17:22

标签: linux tar symlink

为了简化交叉编译的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

1 个答案:

答案 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