
软件编译过程中用到指定路径的头文件、链接指定路径的库,软件运行过程中需要在该指定路径下寻找相应资源。如gcc指定在/usr/include目录查找头文件,binutils中提供的ld命令从/lib、/usr/lib、LD_LIBRARY_PATH、/etc/ld.so.conf等指定路径进行共享库和静态库连接。交叉编译时需要在本地系统进行编译,而编译出的软件在目标系统运行,这就存在编译时指定的路径和运行时的路径不一致的矛盾。DESTDIR和sysroot配合用于解决这个问题。也就是说如果配置了SysRoot,则程序就会从Sysroot中设置的目录中搜寻库,头文件,如下:
-lpthread -lz -lcrypto -lssl -lm -ltinyalsa -lstdc++
这样链接库时,如果设置了SysRoot目录,则去SysRoot目录搜寻pthread、rypto、 ssl 、m 、tinyalsa 、stdc++库,而不是去默认的/usr/lib, /lib、/usr/lib、LD_LIBRARY_PATH、/etc/ld.so.conf等指定路径进行共享库和静态库连接。但是要使Sysroot的设置起作用,必须将下图的Shadow build 取消,否则不起作用,从而报这些库找不到的错误

本文探讨了如何通过DESTDIR和sysroot在软件编译和运行时解决路径不一致的问题,重点讲解了如何配置sysroot来指定资源搜索路径,以及取消Shadowbuild设置的重要性。
643

被折叠的 条评论
为什么被折叠?



