链接期间未定义对全局变量的引用

2024-02-10

我正在尝试编译一个程序,该程序分为3个模块,对应3个源文件:a.c, b.c, and z.c. z.c包含main()函数,它调用函数a.c and b.c。此外,还有一个函数a.c调用一个函数b.c,反之亦然。最后还有一个全局变量count它由三个模块使用并在单独的头文件中定义,global.h.

源文件的代码如下:

a.c

#include "global.h"
#include "b.h"
#include "a.h"

int functAb() {
    functB();
    functA();
    return 0;
}

int functA() {
    count++;
    printf("A:%d\n", count);
    return 0;
}

b.c

#include "global.h"
#include "a.h"
#include "b.h"

int functBa() {
    functA();
    functB();
    return 0;
}

int functB() {
    count++;
    printf("B:%d\n", count);
    return 0;
}

z.c

#include "a.h"
#include "b.h"
#include "global.h"

int main() {
    count = 0;
    functAb();
    functBa();
    return 0;
}

头文件:

a.h

#ifndef A_H
#define A_H

#include <stdio.h>

int functA();
int functAb();

#endif

b.h

#ifndef B_H
#define B_H

#include <stdio.h>

int functB();
int functBa();

#endif

global.h

#ifndef GLOBAL_H
#define GLOBAL_H

extern int count;

#endif

最后,makefile这重现了我的错误:

CC = gcc
CFLAGS = -O3 -march=native -Wall -Wno-unused-result

z:  a.o b.o z.o global.h
    $(CC) -o z a.o b.o z.o $(CFLAGS)
a.o:    a.c b.h global.h
    $(CC) -c a.c $(CFLAGS)
b.o:    b.c a.h global.h
    $(CC) -c b.c $(CFLAGS)
z.o:    z.c a.h global.h
    $(CC) -c z.c $(CFLAGS)

这样,我可以编译对象a.o, b.o, and z.o很好,但是,当链接时make z, I get undefined reference to 'count'在所有这些中:

z.o: In function `main':
z.c:(.text.startup+0x8): undefined reference to `count'
a.o: In function `functAb':
a.c:(.text+0xd): undefined reference to `count'
a.c:(.text+0x22): undefined reference to `count'
a.o: In function `functA':
a.c:(.text+0x46): undefined reference to `count'
a.c:(.text+0x5b): undefined reference to `count'
b.o:b.c:(.text+0xd): more undefined references to `count' follow
collect2: ld returned 1 exit status

我设法在这个最小的示例中重现实际代码中的错误,所以我猜模块之间的依赖关系存在问题,但我无法发现它。有人能指出我正确的方向吗?


改变你的z.c to

#include "a.h"
#include "b.h"
#include "global.h"

int count; /* Definition here */
int main() {
    count = 0;
    functAb();
    functBa();
    return 0;
}

From global.h,你的所有文件都继承宣言变量的count但是定义所有文件中均缺失。

您必须将定义添加到文件之一,如下所示int count = some_value;

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

链接期间未定义对全局变量的引用 的相关文章

  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are

随机推荐

  • 什么时候应该使用导航控制器?

    我不知道什么时候应该使用导航控制器而不是使用普通视图控制器的 segue 如果使用segue Modal和Push segue有什么不同 你可以给我一个例子吗 简短回答 使用具有 show segues 的导航控制器仅用于实现向下钻取行为
  • 有多少用户可以运行使用 OpenGL 3.x 的软件?

    我可以期望用户能够运行使用 OpenGL 3 x 的软件吗 拥有开源图形驱动程序的 Linux 用户可以运行 OpenGL 3 x 吗 我知道Mesa3D 7 8仅支持OpenGL 2 1 我还知道 OS X Snow Leopard 支持
  • 以编程方式连接到 Android wifi 网络

    我正在尝试连接到选定的 wifi 网络 从 UI 但无法连接到它 这是我的代码 private boolean addNetworkAndActivate ScanResult scanResult String password Wifi
  • 实体框架(代码优先)-动态构建模型

    我有一个包含我的域类的程序集 Domains dll 我动态地将程序集加载类添加到我的 DbContext Dbset 中 public class MyContext DbContext public MyContext base DBC
  • 将 NumPy 数组转储到 YAML 作为常规列表

    当使用 PyYAML 在 YAML 文件中保护 NumPy 数组时 它默认添加大量元数据 以便在加载文件时可以恢复实际数组 例子 import numpy as np import yaml a np array 1 2 3 print y
  • 初学者如何在 Asp.net MVC3 中连接 Sql 数据库

    我曾经在 ASP Net 中开发应用程序 在这种情况下我们可以使用 ADO net 和连接字符串 以及代码隐藏文件 但这里 MVC 是分离业务逻辑的好方法 所以我正在学习实现该架构 我正在制作一个示例应用程序 其中问题和答案存储在数据库 S
  • PyRFC中nuc_length和uc_length参数的含义?

    我最喜欢的搜索引擎 ecosia https www ecosia org 无法从上游 SAP 找到有关以下含义的规范文档uc length vs nuc length 两者有什么区别 我通过修改版本获得这些参数clientPrintDes
  • 列出可用的平台工具集

    有没有办法列出 VS2012 中可用的平台工具集 我的意思是一个可能包含 v90 v100 v110 v110 xp 和任何外部提供的平台工具集的列表 或者 应该更容易 有没有办法检查给定的平台工具集是否已安装 这是一个控制台应用程序实用程
  • Robots.txt 类别 URL 限制

    我无法找到有关我的案件的信息 我想限制以下类型的 URL 被编入索引 website com video title video title 我的网站生成我的视频文章的双 URL 副本 每篇视频文章的 URL 开头均以 视频 一词开头 所以
  • 使用 Selenium 和 Python 在 Instagram 通知上点击“现在不”

    我已经编写了一个可以成功登录 Instagram 的脚本 当我应该在家里使用我的帐户时 网站会显示一个弹出窗口 询问您是否需要通知 此时 我尝试了很多解决方案 但一无所获 我只是希望 当显示弹出窗口时 脚本应该单击 现在不 from sel
  • 将可选参数传递给函数,三个点

    我很困惑如何 works tt function return x 为什么不tt x 2 return 2 相反 它失败并出现错误 tt x 2 中的错误 未找到对象 x 尽管我路过x作为论据 因为你在其中传递的所有内容 停留在 您传递的未
  • 迭代时不打印变量

    我正在为个人项目编写 C CSV 类 但偶然发现了一个奇怪的错误 在我的测试程序中 我有代码 for int i 0 i lt 3 i std cout lt lt i lt lt std vector
  • 高基数字段的 Hive 查询性能

    我在配置单元中有一个单一但巨大的表 几乎总是使用主键列进行查询 例如 employee id 该表将非常巨大 每天插入数百万行 我想使用该字段上的分区进行快速查询 我关注了这个帖子 https stackoverflow com quest
  • 检查 IOS 8 中是否启用了本地通知

    我在互联网上查找了如何使用 IOS 8 创建本地通知 我找到了很多文章 但没有一篇文章解释了如何确定用户是否打开或关闭了 警报 有人可以帮帮我吗 我更喜欢使用 Objective C 而不是 Swift 您可以使用以下方法检查它UIAppl
  • Java System.nanoTime() 经过时间的巨大差异

    我正在使用 android 小部件并检查 System nanoTime 的两次调用之间的经过时间 并且数字很大 你如何用这个来衡量经过的时间 它应该是零点几秒 但实际上却更长 谢谢 The System nanoTime returns
  • 使用 groupby 对多列进行 Value_counts

    我需要一些关于熊猫的帮助 我有以下数据框 df pd DataFrame 1Country FR FR GER GER IT IT FR GER IT 2City Paris Paris Berlin Berlin Rome Rome Pa
  • 是否可以将帮助图标放在 p:accordionPanel 标题中?

    我正在使用 PrimeFaces 5 2 和 JSF 来开发页面 但我无法在 Accordion 面板标题中添加搜索图标和其他链接
  • 是否可以跳过“+”运算符中的 NA 值?

    我想用 R 计算方程 我不想使用该函数sum因为它返回 1 值 我想要完整的值向量 x 1 10 y c 21 29 NA x y 1 22 24 26 28 30 32 34 36 38 NA x 1 10 y c 21 30 x y 1
  • 为什么 Collections 类包含独立(静态)方法,而不是将它们添加到 List 接口中?

    对于所有方法收藏 http java sun com javase 6 docs api java util Collections html需要一个List http java sun com javase 6 docs api java
  • 链接期间未定义对全局变量的引用

    我正在尝试编译一个程序 该程序分为3个模块 对应3个源文件 a c b c and z c z c包含main 函数 它调用函数a c and b c 此外 还有一个函数a c调用一个函数b c 反之亦然 最后还有一个全局变量count它由