找不到libcrypto库错误

当我试图编译一个使用openssl'encryption'库函数与命令行-lcryptogcc 4.4.3C代码,它会给出一个错误

 `@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找不到现有的库,但是这并没有帮助。

查找命令结果

 $ 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标志,但导致了这些错误

 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 

非常感谢

-L /usr/local/ssl/lib/到GCC命令行中,在-lcrypto之前。 由于您正在构建/usr/local/ssl下的OpenSSL头文件,因此您还需要使用相同的前缀链接实际的库(即使您似乎只安装了一个静态的库,可能是也可能不是意图;你可能需要正确地重新安装你的OpenSSL从源生成)。

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

如果您不熟悉链接到正确的库,我建议您使用OpenSSL从您的操作系统包管理器安装; 它可以为您节省一些麻烦。

这可能与那些试图从源代码构建自己的openssl然后用它来编译其他程序(在我的情况下是Git)

在openssl的配置过程中,添加“shared”选项,如: ./config shared

这将创建所需的静态库libcrypto.so您将在INSTALL文件中找到更多;)

此外,如果您在“make”过程中遇到此错误“….在创建共享对象时无法使用;使用-fPIC重新编译”

只需在./config中添加-fPIC即可

./config shared -fPIC

虽然我希望有人告诉我,它究竟做了什么,而且我没有搞砸了。