在 2 个 .c 文件之间共享函数

2024-06-29

dir1有dir2、file1.c和file1.h。

dir2 有 file2.c

现在,如果我想在 file2.c 中访问 file1.c 中定义的函数,我需要在 file1.h 中声明它并在 file2.c 中包含 file1.h ——这是一个有效的假设吗?

如果不是,请解释一下。

如果是,即使这样做之后我也会收到“未定义的函数引用”错误。

file2.c:29:对“函数”的未定义引用 Collect2: ld 返回 1 退出状态*错误代码1


编译 C 程序分为两个基本步骤:编译和链接。编译将源代码转换为目标代码,链接将目标代码放在一起,并将所有符号连接在一起。

你的问题是链接器问题,而不是编译器问题。

您可能正在运行以下命令:

gcc dir_2/file2.c

相反,请执行以下操作:

gcc -c dir_2/file2.c
gcc -c file1.c
gcc -o out file1.o file2.o

The reason发生这种情况并不是因为您没有在标头中声明该函数,或者没有正确包含标头。当链接器尝试将可执行文件中的所有符号放在一起时,它找不到您的函数,因为您只是链接half你的程序的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 2 个 .c 文件之间共享函数 的相关文章

  • 忽略控制器参数缺失导致的异常

    我有一个使用 MVC4 构建的面向互联网的网站 我偶尔会收到来自机器人或好奇的用户发送不完整 URL 请求的错误报告 例如 public class ProductController Controller HttpGet public v
  • C# 参数隐式转换

    有这个代码 class Program static void Main string args Check 3 Console ReadLine static void Check int i Console WriteLine I am
  • clangd 中有“includePath”选项吗?

    我曾经使用 VSCodeC C https marketplace visualstudio com items itemName ms vscode cpptools扩大 这个扩展中有一个功能 在 json 文件中 称为 includeP
  • C# 在 WebBrowser 中调用 JavaScript

    我正在尝试调用 JavaScript 方法WebBrowser WebBrowser webBrowser new WebBrowser webBrowser NavigateToString html webBrowser LoadCom
  • ~ C 中的运算符

    该程序的输出是 13 我从来没有完全理解 C 中的 运算符 为什么它给出 13 作为输出 如何将 运算符限制为数字的 4 位 include
  • 实体框架 - 将枚举的 ICollection 保存在数据库中

    我有一个具有 type 属性的类ICollection
  • IE7 中的多个选项卡和一个工具栏实例

    我用 C 开发了一个用于 Internet Explorer 的工具栏 用于从外部应用程序发送和接收 URL 它在 IE6 中运行得很好 但我想在新版本 IE7 中利用选项卡式浏览 但我在那里遇到了障碍 似乎在 IE7 中 每个选项卡都有一
  • 以编程方式解析和编辑 C++ 源文件

    我想以编程方式解析和编辑 C 源文件 我需要更改 添加代码的某些部分 即函数 类块等 中的代码 我也 最好 能够得到评论 我想做的部分事情可以用下面的代码来解释 CPlusPlusSourceParser cp new CPlusPlusS
  • 如何获取picturebox非公开成员的值?

    我需要从 picturebox 的非公共成员获取图像矩形的值 如何获得该值 提前致谢 这是使用反射获取值的方法 PropertyInfo pInfo pictureBox1 GetType GetProperty ImageRectangl
  • 使用 fork/execvp 和系统调用之间的区别

    使用 system 执行二进制文件与使用 fork execvp 组合执行二进制文件有什么区别 安全性 可移植性 性能方面是否存在差异 系统还使用了一个fork exec 组合 如果你这样做fork exec您自己可以与正在运行的进程并行执
  • 异步方法调用和模拟

    为什么模拟用户上下文仅在异步方法调用之前可用 我编写了一些代码 实际上基于 Web API 来检查模拟用户上下文的行为 async Task
  • 是否有合法的方法使用运算符 << 打印元组和对?

    我有一组模板 函数 允许我打印元组 对 假设元组 对中的每种类型都有operator lt lt 为其定义的 不幸的是 由于 17 4 3 1 添加我的内容是非法的operator lt lt 重载到std 有没有其他方法可以让 ADL 找
  • 如何使用鼠标指针和键盘快捷键捕获文本?

    我想使用 C 或 java 使用鼠标指针和键盘快捷键从打开的窗口捕获文本 喜欢babylon http babylon com 所以 我需要知道什么以及如何实施 我需要使用哪些库 或者我可以使用 winapi 吗 使用脚本语言创建您想要执行
  • Boost的Dijkstra算法教程

    我很难弄清楚如何使用 Boost 的 Dijkstra 算法 我已经阅读了他们的示例和文档 但我仍然无法理解如何使用它 Boost的文档 http www boost org doc libs 1 50 0 libs graph doc d
  • 如何检测任务栏上的右键单击

    我有一个 C 语言的 Windows 窗体应用程序 它以加载对话框开始 正如预期的那样 该应用程序的按钮会显示在 Windows 任务栏中 我想检测可能对该按钮进行的 右键单击 最终 我希望禁用右键单击或只是让加载对话框重新获得焦点 我看到
  • .NET 垃圾收集行为(使用 DataTable 对象)

    我想知道为什么在创建一个非常简单的 DataTable 并将其设置为 null 后 垃圾收集不会清除该 DataTable 使用的所有内存 这是一个例子 变量 Before 应等于 Removed 但事实并非如此 long Before 0
  • 如何在 WinRT 中从 C++ 获取堆栈跟踪?

    我需要从 C 应用程序获取堆栈跟踪 并将其序列化为字符串 以便稍后解析 我在 Windows 上听说过的唯一 API 是 StackWalk64 它似乎不受支持 如何在 Windows 应用商店应用程序中从 C 获取堆栈跟踪 我能够调试复杂
  • 如何在Azure函数应用程序中调用函数后动态更改内容

    我正在使用 Visual Studio 2019 使用 Azure function v3 0 开发 Azure function 应用程序 我实现了一个时间触发的功能 我想更改内容 时间表 function json function j
  • 在 C# 中获取 Selenium RemoteWebDriver 的会话 ID

    我正在尝试获取在 SauceLabs 云上运行的测试的会话 ID 但我似乎无法访问它 我尝试过以下方法 Returns null var sessionId string RemoteWebDriver driver Capabilitie
  • 配置 SourceTrail 以接受带有 @ 语法的嵌入式 c/c++ 头文件

    我正在尝试使用 Sourcetrail https www sourcetrail com https www sourcetrail com 快速了解 pic18 系列微控制器的一些旧嵌入式 c c 源代码 导入硬件包含文件时出现错误 该

随机推荐