【问题标题】:Undefined Symbol in Kernel Module内核模块中的未定义符号
【发布时间】:2013-10-25 16:57:51
【问题描述】:

我正在开发一个非常复杂的 Linux 驱动程序。我正在移动一些文件以尝试“减少脂肪”。我有 4 个“未定义!”链接阶段的符号。我已经搜索了我的源代码,但我真的不知道这些符号包含在哪里。

我想如果我在我编译的 .ko 上做一个objdump -DS 并搜索这些符号,我可能能够从周围的反编译源中判断它们来自哪里。但是,当我搜索符号时,它们甚至都找不到!

有没有办法知道未定义的符号在哪里或如何被包含在内?

【问题讨论】:

  • 也许你可能会检查 GCC 的一些中间 Gimple 表示,或者将 -fdump-tree-all 传递给 GCC 或使用 MELT ....
  • @unexpected62 未定义符号是什么?
  • 未定义的符号是我的代码,没有 Linux 通用的,所以名称不相关。不过我想通了,请参阅下面的答案。

标签: linux linux-kernel driver linux-device-driver objdump


【解决方案1】:

好的,我想出了一个好办法。

我使用nm -u 列出了我的目标文件中未定义的符号。 (.o 文件)

nm - list symbols from object files

在每个.o 上逐一执行该操作并搜索我知道未定义的符号,向我展示了它们来自哪个文件。然后我就有了一个起点,可以在我的实际 .c 文件或该 .c 文件中包含的头文件中找到符号。

现在它不是大海捞针,而是从干草堆上折断的干草中的一根针。

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 2018-12-09
    • 2012-08-06
    • 2014-03-01
    • 2014-12-06
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多