使用到openssl的静态链接构建libcurl

使用到openssl的静态链接构建libcurl,openssl,libcurl,static-linking,nm,Openssl,Libcurl,Static Linking,Nm,我正在尝试使用到openssl的静态链接构建libcurl。为此,我使用了以下配置: OpenSSL: LDFLAGS="-static” LIBS="-ldl” 卷曲: 但它将所有SSL符号显示为未定义。比如说, U SSL_connect U SSL_ctrl 那么这是否意味着libssl.a和libcrypto.a中的符号实际上没有集成到libcurl中 如果是,可以做些什么来将它们真正集成到libcurl.a中 非常感谢任何帮助来帮助我理解这一点。是的,这意味着OpenSSL符号没有

我正在尝试使用到openssl的静态链接构建libcurl。为此,我使用了以下配置:

OpenSSL:

LDFLAGS="-static”
LIBS="-ldl”
卷曲:

但它将所有SSL符号显示为未定义。比如说,

U SSL_connect
U SSL_ctrl
那么这是否意味着libssl.a和libcrypto.a中的符号实际上没有集成到libcurl中

如果是,可以做些什么来将它们真正集成到libcurl.a中


非常感谢任何帮助来帮助我理解这一点。

是的,这意味着OpenSSL符号没有集成到libcurl中

构建libcurl的静态版本时,会得到一个适合静态链接的
libcurl.a
文件。但是您还需要在链接器命令行上提供所有(静态)依赖项库,通常不会首先将它们全部链接到一个静态库中。(如果您想这样做,您必须自己做;curl构建系统不会这样做。)

当您想使用为使用静态OpenSSL而构建的静态libcurl链接您的应用程序时,您可以链接您的应用程序,并在链接器命令行上提供所有必要的lib。在*nix上表示
-lcurl-lcrypto-lssl


(大多数libcurl构建还将使用其他依赖项)。

是的,这意味着OpenSSL符号未集成到libcurl中

构建libcurl的静态版本时,会得到一个适合静态链接的
libcurl.a
文件。但是您还需要在链接器命令行上提供所有(静态)依赖项库,通常不会首先将它们全部链接到一个静态库中。(如果您想这样做,您必须自己做;curl构建系统不会这样做。)

当您想使用为使用静态OpenSSL而构建的静态libcurl链接您的应用程序时,您可以链接您的应用程序,并在链接器命令行上提供所有必要的lib。在*nix上表示
-lcurl-lcrypto-lssl


(大多数libcurl构建也将使用其他依赖项)。

感谢您的回复。我曾尝试在链接器命令行中添加openssl依赖项,但它似乎不适合我。我已经更新了上面的openssl和curl链接配置。我可能在哪里出错?告诉我们细节。你的链接命令行和你得到的错误!事实上,我没有发现任何错误。但是nm命令输出(nm-A libcurl.A | grep“SSL”)中没有显示符号。这就是我怀疑的原因。链接配置细节已经在cURL配置部分的上述问题中提到。libcurl不会提供这些符号,它们是由OpenSSL库提供的。将您的程序和ldd链接起来,以验证它是否是静态的,如果是静态的,您就可以了。你看错了东西啊。。知道了。我链接了这个程序并做了ldd(应该列出共享库)。它显示:“linux vdso.so.1=>(0x00007fff01ffe000)libresolv.so.2=>/lib/x86\u 64-linux-gnu/libresolv.so.2(0x00007f2fcd11800)libpthread.so.0=>/lib/x86\u 64-linux-gnu/libpthread.so.0(0x00007f2fccefa000)libm.so.6=>/lib/x86\u 64-linux-gnu/libm/libm/libm.so.6(0x7f2cbf3000)libc=>/lib64/ld-linux-x86-64.so.2(0x00007f2fcd351000)“感谢您的回复。我曾尝试在链接器命令行中添加openssl依赖项,但它似乎不适合我。我已经更新了上面的openssl和curl链接配置。我可能在哪里出错?告诉我们细节。你的链接命令行和你得到的错误!事实上,我没有发现任何错误。但是nm命令输出(nm-A libcurl.A | grep“SSL”)中没有显示符号。这就是我怀疑的原因。链接配置细节已经在cURL配置部分的上述问题中提到。libcurl不会提供这些符号,它们是由OpenSSL库提供的。将您的程序和ldd链接起来,以验证它是否是静态的,如果是静态的,您就可以了。你看错了东西啊。。知道了。我链接了这个程序并做了ldd(应该列出共享库)。它显示:“linux vdso.so.1=>(0x00007fff01ffe000)libresolv.so.2=>/lib/x86\u 64-linux-gnu/libresolv.so.2(0x00007f2fcd11800)libpthread.so.0=>/lib/x86\u 64-linux-gnu/libpthread.so.0(0x00007f2fccefa000)libm.so.6=>/lib/x86\u 64-linux-gnu/libm/libm/libm.so.6(0x7f2cbf3000)libc=>/lib64/ld-linux-x86-64.so.2(0x00007f2fcd351000)”
nm -A libcurl.a | grep “SSL_"
U SSL_connect
U SSL_ctrl