【问题标题】:C++: linker cannot find -lcrypto, but the library is in the pathC++:链接器找不到-lcrypto,但库在路径中
【发布时间】:2013-10-24 17:18:50
【问题描述】:

我正在使用 GNU g++ 编译 C++ 应用程序。该项目利用了 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

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

问题

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

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

collect2: ld 返回 1 个退出状态

make: * [cppsims_par] 错误 1

但我确实检查了文件夹和所有内容...libcrypto.so/usr/lib64/ 内。怎么回事?

【问题讨论】:

  • 符号链接是否指向实际文件?
  • 啊...我明白你的意思...去检查
  • 我有两个文件:/usr/lib64/libcrypto.so.10/usr/lib64/libcrypto.so.1.0.0。在执行ls -l 时,我可以看到符号链接的以下路径:/usr/lib64/libcrypto.so.10 -> libcrypto.so.1.0.0。最后一个是ls 命令输出的摘录。
  • 不回答您的问题,但请注意您希望以从多到少的依赖顺序链接您的目标代码和库。 (即您的 .o 使用 libcrypto,因此您的链接行应该带上 .o 的 first,然后是 -lcrypto)。一些链接器,特别是 gcc 的 ld,对此相当挑剔。但我也很好奇,为什么如果您的路径有效,libcrypto 无法定位。
  • 您可以尝试的一件事是将-v 添加到您的 gcc 行。它相当嘈杂,但它应该显示为需要路径的操作搜索的 all 路径,包括包含路径和链接器路径。 编辑,从你的文件编译行中取出 -lcrypto。编译但不链接您的mysrc*.cpp 文件的行。这不是一个链接步骤,它是一个仅编译的步骤,不应该存在。它应该只在你的 last 行。同样,该行也不需要 lib 路径。

标签: c++ linux linker g++ shared-libraries


【解决方案1】:

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

strace -f -e trace=file g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto 
    *.o -o ./myapp.out

【讨论】:

  • 尝试这个...遇到错误并查看了手册页...也许您的意思是:-e trace=file?
  • 啊..是的。更正了
  • 运行strace 后,我可以看到引用/usr/lib64/libcrypto.so 的每一行都失败了...
  • 有很多很多很多行,例如:[pid 10780] open("/usr/lib/libcrypto.so", O_RDONLY) = -1 ENOENT (No such file or directory)... but it reports paths for libcrypto` 这与我在链接命令中报告的不同。我告诉编译器寻找/usr/lib64/,但它正在寻找其他地方......`
  • 顺便说一句,错误太多了...不仅找不到这个库,strace还显示其他行未找到的文件...
【解决方案2】:

我确实找到了问题,它与这个问题有关:ld cannot find an existing library

实际上我没有符号链接libcrypto.so,编译器也找不到库...

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2021-08-24
    • 2020-09-12
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多