gcc編譯鏈接時指定頭文件和庫文件搜索路徑

問題:
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,這樣就能找到動態庫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章