windows下面編譯並使用 curl 靜態庫我就不說了, 很簡單。。。。。。
linux下面 編譯後產生了 libcurl.a 檔案,
但是在程式中靜態連結 這個 libcurl.a 檔案, 會發生很多的連結錯誤, 如果是動態連結 libcurl.a 檔案則不會發生什麼問題。
/usr/lib/libcurl.a(ssluse.o): In function `Curl_ossl_init':
(.text+0xcd1): undefined reference to `SSL_library_init'
/usr/lib/libcurl.a(ssluse.o): In function `Curl_ossl_connect_common':
(.text+0x1ba9): undefined reference to `SSL_get1_session'
上面隨便挑幾個錯誤。。。
後來經過一番折騰, 突然恍悟, 只需要添加下面的連結, 問題即可解決啊
-lcrypto -lidn -lssl /usr/lib/libcurl.a
這樣編譯產生的 可執行程式裡面用 命令
ldd 檔案名稱 執行後, 依賴庫裡面已經沒有 libcurl.so.4 的依賴項了。。。。
[root@localhost rtspProxy]# ldd proxy_D<br /> linux-gate.so.1 => (0x00bd5000)<br /> libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00cb7000)<br /> libpthread.so.0 => /lib/libpthread.so.0 (0x009da000)<br /> libcrypto.so.6 => /lib/libcrypto.so.6 (0x00243000)<br /> libidn.so.11 => /usr/lib/libidn.so.11 (0x0061a000)<br /> libssl.so.6 => /lib/libssl.so.6 (0x007b0000)<br /> libm.so.6 => /lib/libm.so.6 (0x009ab000)<br /> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00b37000)<br /> libc.so.6 => /lib/libc.so.6 (0x00863000)<br /> libdl.so.2 => /lib/libdl.so.2 (0x009d4000)<br /> libz.so.1 => /usr/lib/libz.so.1 (0x009f3000)<br /> libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x003a0000)<br /> /lib/ld-linux.so.2 (0x00841000)<br /> libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00411000)<br /> libcom_err.so.2 => /lib/libcom_err.so.2 (0x00df1000)<br /> libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x004be000)<br /> libresolv.so.2 => /lib/libresolv.so.2 (0x0022e000)<br /> libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x004b3000)<br /> libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x0039b000)<br /> libselinux.so.1 => /lib/libselinux.so.1 (0x00101000)<br /> libsepol.so.1 => /lib/libsepol.so.1 (0x00da4000)
如果你用上面的選項還是出現連結錯誤,比如下面這樣的東東
ldap.c:(.text+0x91): undefined reference to `ldap_url_parse'
請你編譯 curl庫的時候 用下面的指令產生 makefile檔案
./configure --disable-ldap --disable-ldaps ,
編譯好後在連結即可。