【发布时间】:2017-01-17 12:21:21
【问题描述】:
我正在尝试了解链接错误的原因。这个例子是具体的,但原因可能是我不明白的一般原理。
我想从this post 构建最小示例。 Ubuntu 14.05.5。我做到了:
$ apt-get install libssl-dev
$ opensll version
OpenSSL 1.0.1f 6 Jan 2014
$ echo $LD_LIBRARY_PATH
/usr/local:
$ gcc -I/usr/include/openssl -o test md5.c -L/usr/lib/x86_64-linux-gnu -lssl
/tmp/ccUSgfgs.o: In function `main':
md5.c:(.text+0x26): undefined reference to `MD5_Init'
md5.c:(.text+0x68): undefined reference to `MD5_Update'
md5.c:(.text+0xab): undefined reference to `MD5_Final'
collect2: error: ld returned 1 exit status
这会引发常见的链接错误。它找不到这些符号的定义。通过随机尝试,我发现了这个版本:
$ gcc -I/usr/include/openssl -o test md5.c -L/usr/lib/x86_64-linux-gnu -lcrypto
唯一的区别是“-l crypto”而不是“-l ssl”
为什么一个构建而另一个不构建?
【问题讨论】: