Я пытаюсь понять причину ошибки связывания. Этот пример специфичен, но причина, вероятно, является общим принципом, который я не понимаю.Почему ссылка openssl/md5.h против «crypto», но не «ssl»
Я хотел создать минимальный пример от 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 крипто» вместо «-l SSL»
Почему один билд, а другой нет?
Также см. [Как создать хеш-строку md5 в C?] (Http://stackoverflow.com/q/7627723) – jww