C++:链接器找不到-lcrypto,但是库在路径中

And*_*dry 11 c++ linux linker g++ shared-libraries

我正在使用GNU编译C++应用程序g++.该项目利用了OpenSSL库.

背景

在我的机器上(64位CentOS四核)我编译并链接我的文件.

g++ -g -c -L/usr/local/lib/ -L/usr/lib64/ 
    -I/usr/local/include/ -I/usr/local/ssl/include/ 
    -lcrypto mysrc1.cpp mysrc2.cpp mysrc3.cpp

g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto 
    *.o -o ./myapp.out
Run Code Online (Sandbox Code Playgroud)

我的应用程序使用MD5包含在中的函数libcrypto.so.正如您所看到的,我指定g++了dirs在哪里搜索使用-L,-I选项以及使用该选项查找的库-l<lib-name>.有一些简单的路径/usr/local/lib,当然可以省略,但我指定它们因为makefile是参数化的.

问题

我的问题是我可以成功编译我的东西(第一个命令),但链接失败(第二个命令):

/ usr/bin/ld:找不到-lcrypto

collect2:ld返回1退出状态

make:* [cppsims_par]错误1

但我确实检查了文件夹和所有内容...... libcrypto.so在里面/usr/lib64/.到底是怎么回事?

tri*_*tan 5

如果您尝试 strace 找出文件查找失败的原因,这可能会有所帮助

strace -f -e trace=file g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto 
    *.o -o ./myapp.out
Run Code Online (Sandbox Code Playgroud)

  • 有很多很多行,例如:`[pid 10780] open("/usr/lib/libcrypto.so", O_RDONLY) = -1 ENOENT(没有这样的文件或目录)...但它报告了`libcrypto`的路径这与我在链接命令中报告的不同。我告诉编译器寻找 `/usr/lib64/` 但它正在寻找其他地方...... ` (2认同)