1)指定运行时库(.so)搜索路径:
例:-Wl,-rpath=.
指定运行时库搜索路径为工作目录。
2)指定编译时库(.so)搜索路径:
例:-Wl,-rpath-link=.
例:-L .
指定编译时库搜索路径为工作目录。
3)指定头文件 -I path
例:g++ main.c -L /root/test/openssl3/lib64 -I /root/test/openssl3/include -Wl,-rpath=/root/test/openssl3/lib64 -lcrypto -o main -fpermissive
例子中openssl-3.0头文件放在“/root/test/openssl3/include”文件夹下,实验系统中还有一个openssl-1.1版本的库,所以需手动指定头文件包含路径。
4)指定库文件 -L path
例:g++ main.c -L /root/test/openssl3/lib64 -I /root/test/openssl3/include -Wl,-rpath=/root/test/openssl3/lib64 -lcrypto -o main -fpermissive
例子中openssl-3.0库文件(.so)放在“/root/test/openssl3/lib64”文件夹下,实验系统中还有一个openssl-1.1版本的库,所以需手动指定库文件包含路径。“-Wl,-rpath”指定了main程序运行时libcrypto.so.3的搜索路径。
5)指定部分库静态链接
例:使用GCC编译并链接主程序,指定 libstatic.a
静态链接,libdynamic.so
动态链接
gcc main.c -o myprogram -l:libstatic.a -ldynamic
6)gcc编译器库文件和头文件搜索路径
/usr/local/include、/usr/local/lib。可以将第三方库文件和头文件放到这两个文件夹下面,然后运行ldconfig命令更新ld链接器搜索路径列表。
11)Visual Studio 2022跨平台项目,动态库链接错误问题:
问题:通过“-Wl,-L/root/git/openssl/build/lib64/”选项设置附加链接库路径无效
如下图所示,链接时未链接到指定库目录下的libcrypto库,而是链接到了一个系统目录下的库。
解决方法:将其改为“-L/root/git/openssl/build/lib64/”。
如下图所示,链接时已经链接到指定库目录下的libcrypto库。