排除编译时链接错误

时间:2010-01-08 17:56:04

标签: c++ gcc linker openssl

我正在尝试静态链接到libcrypto.a(来自openssl库),然后使用新的工具链从源代码构建它。但是,每当我尝试使用该库中的任何函数时,我都会收到“未定义的引用”错误。我确保包含正确的头文件。我还仔细检查了libcrypto.a的符号表,并确保确实定义了这些函数。

我还能做些什么来调试这个错误 - 比如从链接器中获取更多信息或检查libcrypto.a本身,找出当被起始符号出现时链接器吐出“未定义引用”错误的原因在符号表中?

3 个答案:

答案 0 :(得分:1)

我看到您的帖子被标记为c++。 OpenSSL是用C语言编写的。

你还记得吗

extern "C" {
#include <various SSL files>
}

答案 1 :(得分:1)

使用nm

从libcrypto中删除符号

所以你可以看看它是否存在 - 可能不是(duh)

ssl有2个库,也许你使用的是错误的

缺少的符号

是什么

答案 2 :(得分:1)

未定义的引用/符号是链接器错误,指示链接器无法在链接的任何对象模块中找到指定的符号。这表示以下一项或多项:

  1. 指定的类/方法/函数/变量/未在项目中的任何位置定义的任何内容。
  2. 符号无法访问,可能是由于访问说明符(在C ++中,不适用于ANSI C)
  3. 参考不正确。这可能是由于拼写错误或类似问题。 (不可能)
  4. 在调用链接器时,您忽略了在构建脚本中包含所需的库。