gcc编译链接时指定头文件和库文件搜索路径

加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

问题:
sudo gcc rongji_ssl.c -lssl
提示找不到openssl/ssl.h等头文件的错误

原因:
gcc在系统默认指定的头文件搜索目录下没找到,默认的头文件搜索目录为:
/usr/include
/usr/local/include
以及/usr/lib/gcc下的一些include目录
注意以上搜索目录也包含子目录!

解决:
方法1:sudo cp -rf /usr/local/ssl/include/openssl /usr/include/
方法2:在编译后面加-I/usr/local/ssl/include
================================================


解决了上面问题后,sudo gcc rongji_ssl.c -lssl又出现了一个新问题:
/usr/bin/ld: cannot find -lssl

原因:gcc在默认的库搜索路径下找不到ssl库文件。
默认的库(包括动、静态库)搜索路径为:
/lib、/usr/lib、/usr/local/lib、
另外动态库搜索路径还可以由:
LD_LIBRARY_PATH环境变量(profile中定义)、/etc/ld.so.conf中指定。

与添加头文件搜索路径类似,在编译时添加-L参数可指定搜索动、静态库的路径。
默认情况下,gcc在链接时优先使用动态库,只有当动态库不存在时才考虑使用静态库,如果需要的话可以在编译时加上-static选项,强制使用静态库。
如:gcc foo.c -L /home/xiaowp/lib -static -lfoo

解决:
通过查找,当前的ssl库为:
/usr/lib/libssl.so.0.9.8
/usr/local/ssl/lib/libssl.a
因此上面的解决方法有:
方法1:在编译后面加-L/usr/local/ssl/lib,使gcc找到并使用静态库。
方法2:sudo ln -s /usr/lib/libssl.so.0.9.8 /usr/

gcc的参数 -I-L 的用法 gcc的参数 -I-L 的用法 参考网址:http://blog.csdn.net/qinzhonghello/article/details/3281475 当头文件gcc不在同一目录下要用 -I dir参数,它是指头文件所在的目录。而添加库文件需要 -L dir参数,它指定库文件所在的目录。 1. -I dir    使用#incl 阅读详情

相关推荐

gcc/g++ 常用编译指令

一、简单编译 #include <stdio.h> int main(int argc, char* argv[]) { printf("test\n"); return 0; } g++ main.cpp -o main 二、链接相关库 #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <string> #in

cosysun的专栏 844

centos7编译busybox /opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: cannot find -l*

导致该情况为链接器未找到库路径导致,需要在编译busybox make menuconfig进行路径配置。保存配置后重新编译即可。

weixin_42291112的博客 1084

Linux系统的头文件库文件搜索路径

Include的header文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。当初在编译指定的(在~gcc/gcc/collect2.c:locatelib()写在specs内的后来用-D -I -L指定gcc环境变量设定(编译候)ld.so的环境变量(这是run time的候)一、头文件gcc编译如何去寻找所需要的头文件 :※所以header file的搜寻会从-I开始

1065

linux gcc 编译找不到头文件,找不到库

找不到头文件 解决方式 1、把头文件路径写成绝对路径,把路径写全,如 #include "/usr/include/stdio.h" 2、软链接include默认路径下,或者直接拷贝 # 符号链接 ln -s /usr/include/ffmpeg/libavcodec/ /usr/include/ # 直接拷贝 cp -r ffmpeg/* /usr/include/ cp -r ffmpeg/libavcodec/ ./ 注意,删除符号链接文件夹使用 # 无论是删除符号链接文件

qq_38781075的博客 2万+

解决/usr/bin/ld: cannot find -lssl

一般情况下,-lssl表示要寻找库 libssl.so, 而上面的错误表示ld找不到这个库,一般情况下,原因是系统中没有安装这个库,只要安装就好了。 可以先使用sudo apt-cache search libssl-dev查看一下该库的信息 然后使用sudo apt-get install libssl-dev来安装,一般都能找到相应的库   最开始我搞错了,sudo apt-get i...

weixin_34212189的博客 1051

Linux操作系统的头文件库文件搜索路径

转自:http://www.zxbc.cn/html/20080712/60742.html Include的header文件,动态链接库,系统定义,总共有下列来源指定gcc去那里找。 当初在编译指定的(在~gcc/gcc/collect2.c:locatelib() 写在specs内的 ,内定的,这是当初compile gcc写在程序内的。 后来用-D -I -L指定的 g

lewsn2008的博客 5680

GCC编译器的使用方法

编译流程 GCC编译器在编译C代码需要经过以下4个步骤: 预处理(preprocessing):对.c源文件进行预处理(头文件展开宏替换),生成.i文件 编译(compilation):对.i文件进行编译,生成.s汇编文件 汇编(assembly):对.s文件进行汇编,生成.o目标文件 链接(linking):将.o文件与库文件进行链接,生成可执行文件 gcc命令使用 命令格式 使用man gcc可查看gcc命令的常用选项: gcc [-c|-S|-E] [-std=standard] [-

zzy979481894的博客 9194

gcc 编译makefiel编写指定头文件库文件的参数 -I -L -l

比如: gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 上面这句表示在编译hello.c-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,    寻找的顺序是:/home/hello/include-->/usr

u012467749的专栏 4818

C++头文件及库搜索路径

头文件搜索路径 第一种 #include "head.h" 搜索当前目录 搜索 -I 指定的目录 搜索 gcc 的环境变量 CPLUS_INCLUDE_PATH (C程序使用 C_INCLUDE_PATH ) 对应的目录 搜索 gcc 的内定目录 /usr/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/include 第二种 #include <head.h> 搜索 -I 指定的目录 搜索 gcc 的环境变量 CP

qq_55179414的博客 1122

linux下 gcc 默认搜索路径

如何指定GCC的默认头文件路径 有大量的环境变量可供设置以影响 GCC 编译程序的方式。利用这些变量 的控制也可使用合适的命令行选项。一些环境变量设置在目录名列表中。这些名字 PATH 环境变量使用的格式相同。特殊字符 PATH_SEPARATOR (安装编译程序的候定义)用在目录名之间。在 UNIX 系统中,分隔符是冒号,而 Windows 系统中为分号。 C_INCLUDE_PAT

codemanrock 5345

编译过程中gcc -I -L -l区别

gcc编译程序,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:例:gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 上面这句表示在编译hello.c:-I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文

mengxiangjia_linxi的博客 741

gcc -I -L -l与路径

我们用gcc编译程序,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录: 例: gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 上面这句表示在编译hello.c: -I /home/hello/incl

u010434655的专栏 869

Makefile中 -I -L -l区别

我们用gcc编译程序,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录: 例: gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 上面这句表示在编译hello.c: -I /home/hello/include表示将/home/hello/incl

IF U 的博客 3万+

gcc -I -L -l区别

我们用gcc编译程序,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录: 例: gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 上面这句表示在编译hello.c: -I /home/hello/incl

daisyZH的专栏 555
上一篇: cin.ignore()
下一篇: 二叉查找树的删除操作
penzo
博客等级 码龄19年 15粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值