您的位置:首页 > 其它

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

2010-11-10 21:58 525 查看
问题:
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/lib/libssl.so,这样就能找到动态库了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: