6

在使用我正在使用的特定工具链进行交叉编译时,我无法确认我对 rpath-link 如何工作的理解(尽管我认为这是一个普遍适用于交叉编译的一般问题)。

当我查看在构建库和应用程序时将哪些标志传递给编译器和链接器时,我看到以下传递给链接器:

-Wl,-rpath-link,/home/Dev/env/sys/crosscompiletoolchain/armle-v7/lib/

因此,这是一条嵌入到为我的开发机器上的目标设备构建的共享库中的路径。这是有道理的,因为我会在部署到设备之前在开发机器上进行所有最终链接。当我最终部署到设备时(即共享库 + 应用程序),这些共享库不会有无用的 rpath 链接吗?

无论如何,构建的库和应用程序似乎都可以在目标上正常工作,如果我不得不猜测,我会说它是因为该应用程序具有由设备操作系统提供的环境,该环境具有 /lib/ 作为其默认库搜索之一路径(rpath-link 仅指定要搜索的第一组目录)。这个对吗?

4

1 回答 1

13

检查“使用 LD,GNU 链接器 - 选项 - GNU 项目档案”(ftp.gnu.org/pub/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html):

-rpath 和 -rpath-link 的区别在于 -rpath 选项指定的目录包含在可执行文件中并在运行时使用,而 -rpath-link 选项仅在链接时有效。

于 2014-01-10T09:47:14.877 回答