为了简化交叉编译的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将被打补丁到相对链接。
提前感谢
延斯·里博尔德
发布于 2018-04-01 15:00:07
我发现了我的帖子的问题。只有当符号链接的目标也在tar归档中时,tar才会设置相对链接。
raspberry pi的交叉编译的问题是库的绝对符号链接和ld脚本中的绝对路径。(SO文件)。
如果你将预构建库从raspberry pi复制到你的交叉编译项目中,那么你必须解决这个问题。在我的项目中,我花了一些时间来理解奇怪的链接器问题。
该项目的工作方式如下:
sync_package.pl <debian package name>输出是一个tar文件,其中包含ld脚本中的相对链接和相对路径。
示例:
sync_package.pl libmodbus-dev输出:
sysroot-libmodbus-dev.tarhttps://stackoverflow.com/questions/49582114
复制相似问题