【问题标题】:Function call without definition(in header, no dlls or static libs)没有定义的函数调用(在头文件中,没有 dll 或静态库)
【发布时间】:2014-07-25 20:25:13
【问题描述】:

我交了一个嵌入式控制器代码,它有一堆.c 文件和一些头文件以及许多用于嵌入式处理器的相关文件,它是一个摩托罗拉 MC9S12DT256,它使用了一个不太好的编译器 - Cosmic .我使用 Visual Studio(只是一个 txt 编辑器)来修改代码,它会更改正在刻录到处理器的 hex 文件。

我本周早些时候得到了它,大部分时间都花在了它上面,它对于小的更改(更改代码中的值并再次编译进行了必要的更改)工作正常。现在我必须进行一些重大更改。该代码调用了某些函数,这些函数在我得到的所有 .hpp/.h/.cpp 中的任何地方都找不到。也没有关联的 dll。我试图找到一些基本链接并将其放在 .sln 中,但仍然无法识别大多数数据(因为我无法去声明 defn)。 所以我的问题是 - 如何在 VS 空白时将函数定义到调用它的位置。查找所有参考资料也无济于事

谢谢 下午

【问题讨论】:

  • 什么样的函数(如果没有更多的名字?)也许它们是与编译器一起打包的库中的助手?考虑使用递归搜索工具来扫描整个安装/构建机器的名称。最终,如果您发现没有源代码的二进制实现,您可能需要做出明智的猜测并从中制作新的原型。
  • 如果你提到了你找不到的功能,你几乎肯定会得到一个更好的答案。你搜索过编译器提供的包含目录吗?
  • 函数是 can_init0(), can_init1(这些是特定于代码的,因为它用于控制器是 nw 库)所以我相信这些不是编译器内在函数。它们可以存在于静态库中,我认为一方面是 Visual Studio 静态库扩展,因为宇宙中的大多数 def 将具有不同的扩展。在 make 文件中,我包含了所有头文件路径 - 这就是为什么使用先前的微小更改编译代码的原因,我可以对我的嵌入式开发人员进行编程,该开发人员在更改后按预期工作。扫描所有以前的版本后

标签: c++ function embedded call motorola


【解决方案1】:

它们可能是编译器内在函数(由编译器提供而不是在库中提供的函数)。但不清楚您是如何确定它们不存在于静态库中的,或者为什么您认为应该能够看到定义(而不是声明)。

当使用 Visual Studio 作为嵌入式项目 IDE 时,您应该将项目创建为“makefile 项目”(即使您实际上没有 makefile),并且您需要为您的嵌入式添加所有必要的头文件路径代码和 Cosmic 编译器标准头文件夹作为项目的包含文件 - VS 扫描头文件以获取 Intellisense 代码完成和浏览器导航的声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2014-02-16
    相关资源
    最近更新 更多