排除编译时链接错误

发布于 2024-08-17 09:15:58 字数 241 浏览 3 评论 0原文

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

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

I'm trying to statically link to libcrypto.a (from the openssl library) after building it from source with a new toolchain. However whenever I try to use any of the functions from that library, I keep receiving "undefined reference" errors. I've made sure the right header file was included. I've also double checked the symbol table of libcrypto.a and made sure these functions are indeed defined.

Is there anything else I can do to debug this error- like getting more info out of the linker or examining libcrypto.a itself, to find out why the linker is spitting out "undefined reference" error when the indicted symbols shows up in the symbol table?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦境 2024-08-24 09:15:58

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

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

Undefined reference/symbol is a linker error indicating that the linker can't find the specified symbol in any of the object modules being linked. This indicates one or more of the following:

  1. The specified class/method/function/variable/whatever is not defined anywhere in the project.
  2. The symbol is inaccessible, probably due to an access specifier (in C++, doesn't apply to ANSI C)
  3. The reference is incorrect. This can be due to a spelling error or similar problem. (unlikely)
  4. You've neglected to include the required library in your build script when calling the linker.
煞人兵器 2024-08-24 09:15:58

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

您记得吗

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

I see your post is tagged c++. OpenSSL is written in C.

Did you remember to do

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

?

离去的眼神 2024-08-24 09:15:58

使用 nm grep 从 libcrypto 中取出符号,

以便您可以查看它是否存在 - 可能不存在(duh)

ssl 有 2 个库,也许您使用了错误的库,

缺少的符号到底是什么

grep the symbol out of libcrypto using nm

so you can see if its there - probably not (duh)

ssl has 2 libs , maybe you are using the wrong one

what exectly is the missing symbol

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文