C++学习(二三零)--sysroot -rpath

本文介绍了在C++编译中sysroot的作用,它定义了编译时的逻辑目录,影响库和头文件的查找路径。同时讲解了rpath的重要性,rpath是运行时动态库搜索路径,用于确定可执行文件查找动态库的优先位置。它必须是绝对路径,并且在链接动态库时是必需的。
摘要由CSDN通过智能技术生成

如果在编译时指定了-sysroot就是为编译时指定了逻辑目录。编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前面加上逻辑目录。

当然,如果我们同时指定了--prefix=/home/shell.albert/libqt5.3.2希望生成的库和头文件等都安装到此目录下,执行make install开始复制操作。

但是当我们去系统的/home/shell.albert/libqt5.3.2中去寻找编译成果时却没有这些文件,

而直接的成果输出在了,输出路径是相对于-sysroot的。

rpath全称是run-time search path。Linux下所有elf格式的文件都包含它,特别是可执行文件。它规定了可执行文件在寻找.so文件时的第一优先位置。rpath一般可以在编译时指定,在Linux下,执行./configure时就有-rpath,选项,可以将rpath的路径指定到所需动态库的路径下。

rpath只能是绝对路径,不能是相对路径。使用相对路径是没有意义的,因为相对路径将相对于运行程序时的当前工作目录,而不是相对于找到二进制文件/库的目录。 因此,在几乎任何情况下,它对于$PATH或库中的可执行文件都根本不起作用。

比如你的可执行文件在/usr/bin/exe,动态库在/usr/lib/路径下,rpath被指定为../lib,那么只有进入/usr/bin/路径下执行exe时,才能找到正确的动态库,在其他目录下调用该程序就无法定位到正确的动态库路径下。

link出两个共享库,一个是static,一个则是dynamic;需要注意的是,-rpath必须有才能产生dynamic库来,如果用-static,则只创建st

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值