g++链接时指定运行时库搜索路径runtime library search path


Linux 指定动态链接库路径

问题:

想要指定运行时搜索的动态链接库目录。

g++ -Lpath -llibname 仅仅只能指定好编译时所依赖的库,不能在运行时找到所指定的目录。

解决:

g++ -Wl,-rpath,linkpath 可以通过g++来使用linker的命令参数。

g++ -wl是gcc程序的命令。

-Wl,option 传递一个option给linker。 如果option中包含一个逗号(,),将会以逗号为分割点,分割出多个option。你能用这个语法传递一个实参(argument)给option。

例如:

-Wl, -Map,out.map 将会传递-Map out.map 给linker。当使用GNU linker时,键入-Wl,-Map=out.map你也能获得同样的效果

linker option

-rpath dir 添加一个目录到运行时库搜索目录(the runtime library search path),这个是用shared objects链接一个ELF执行文件。所有-rapth实参将被级联(concatenated),并传递给运行时用来定位shared objects的linker(runtime linker)。

当定位shared object明确include到the link的shared objects -rpath选项;这种用法详情请看-rpath-link option。等linking一个ELF可执行文件时,-rpath没有使用,如果定义了环境变量LD_RUN_PATH,这个环境变量将会被使用。

-rpath或许也会被用到Sun OS上。在SunOs上默认,在所有给定-L option 之外,linker会形成一个运行时搜索补丁(patch)。如果-rpath选项被使用,运行时搜索路径就只会用-rpath option指定的,而忽略-L option。

或许添加多个-L option路径在NFS mounted Filesystems,使用gcc这将会十分有用。为了与其他ELF linkers保持好的兼容性(compatibility),如果 -R option 后面跟个目录(dir name),而不是一个文件名,这个option将会被当做-rpath option。

例子:

#|--processFile
#|-----main.o // include "Poco::Foundation" libPocoFoundation.so.31 file in /opt/mker/poco/lib

$g++ -o main main.o -L/opt/mker/poco/lib -lPocoFoundation -Wl,-rpath,/opt/mker/poco/lib

$./main
ok

 

Linux /etc/ld.so.conf 文件在动态加载过程的作用 >>TODO

Reference.

Link option

https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html

https://opensource.com/article/20/6/linux-libraries


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM