首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到libcrypto库错误

找不到libcrypto库错误
EN

Stack Overflow用户
提问于 2012-04-29 08:15:30
回答 2查看 46.4K关注 0票数 24

当我试图编译一个使用openssl 'crypto‘库函数的C代码时,它给出了一个错误

代码语言:javascript
复制
`@ubu:$ gcc -ggdb aes_m.c -Werror -Wall -I /usr/local/ssl/include/ -lcrypto -o aes
 /usr/bin/ld: cannot find -lcrypto
 collect2: ld returned 1 exit status`

这是什么原因呢??

我已经讨论过这个ld cannot find an existing library了,但这并没有帮助。

定位命令结果在

代码语言:javascript
复制
$ locate libcrypto
/home/abhi/Downloads/openssl-1.0.1b/libcrypto.a
/home/abhi/Downloads/openssl-1.0.1b/libcrypto.pc
/lib/libcrypto.so.0.9.8
/lib/i486/libcrypto.so.0.9.8
/lib/i586/libcrypto.so.0.9.8
/lib/i686/cmov/libcrypto.so.0.9.8
/usr/lib/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib32/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib32/libcrypto.so.0.9.8/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib64/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib64/libcrypto.so.0.9.8/libcrypto.so.0.9.8
/usr/local/ssl/lib/libcrypto.a
/usr/local/ssl/lib/pkgconfig/libcrypto.pc

有没有人能帮我一下或者指出我做错了什么?

@ Daniel Roethlisberger尝试使用-L标志,但这导致了以下错误

代码语言:javascript
复制
gcc -ggdb aes_m.c -Werror -Wall -I /usr/local/ssl/include/ -L /usr/local/ssl/lib -lcrypto -o aes
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x2d): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x43): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x4d): undefined reference to `dlclose'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
dso_dlfcn.c:(.text+0x8f): undefined reference to `dladdr'
dso_dlfcn.c:(.text+0xe9): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
dso_dlfcn.c:(.text+0x4b1): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x590): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
dso_dlfcn.c:(.text+0x611): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x6f0): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
dso_dlfcn.c:(.text+0x755): undefined reference to `dlclose'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
dso_dlfcn.c:(.text+0x837): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x8ae): undefined reference to `dlclose'
dso_dlfcn.c:(.text+0x8f5): undefined reference to `dlerror'
collect2: ld returned 1 exit status

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-29 08:25:06

-lcrypto之前,将-L /usr/local/ssl/lib/添加到GCC命令行中。由于您是针对/usr/local/ssl下的OpenSSL头文件进行构建的,因此您还需要针对同一前缀下的实际库进行链接(尽管您似乎只安装了一个静态库,但这可能不是您的意图;您可能需要正确地重新安装从源代码构建的OpenSSL )。

(编辑)要修复链接器找不到的dlopen()和好友,请在GCC命令行中添加-ldl-ldl告诉链接器还链接到libdl.so,这是包含dlopen()dlsym()dlclose()等的共享库;这些函数由OpenSSL在内部使用,因此,当使用-lcrypto时,-ldl是一个间接依赖。由于您要链接到libcrypto的静态版本,因此需要显式链接所有间接依赖项。

如果您不熟悉链接到适当的库,我建议您使用从操作系统包管理器安装的OpenSSL;这可能会为您省去一些麻烦。

票数 33
EN

Stack Overflow用户

发布于 2014-05-28 13:38:14

这可能与那些试图从源代码构建自己的openssl,然后使用它来编译其他程序(在我的例子中是Git)的人相关

在配置openssl的过程中,添加'shared‘选项:

./config shared

这将创建所需的共享库libcrypto.so。您可以在安装文件中找到更多信息。

另外,如果你在'make‘过程中遇到这个错误

"....can not be used when making a shared object

使用-fPIC重新编译

./config shared -fPIC

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10368671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档