链接对象文件时出现“未定义的引用”错误[重复]

2024-04-17

我意识到这个问题已经通过多种方式提出,包括这个非常全面的答案 https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix但我查看了很多并尝试修复我的错误但无济于事。

我正在使用 .cpp 和 .c 文件来创建程序。我用 g++ 编译了所有文件,它似乎没有更多链接错误,尽管它给了我一堆与 C 语法相关的 C++ 错误。这是我使用的命令:

g++ -o program main.cpp /data/*.c -l[...libs]

main.cpp 调用 .c 文件中的函数。 然后我明白,不应尝试使用一个编译器同时编译 .c 和 .cpp 文件,而应使用 gcc 编译器,使用 g++ 编译另一个编译器,然后简单地链接目标文件。

所以我这样做了(.c 文件是库的一部分,并且已经有了 .o 文件)

g++ -c main.cpp
g++ -o program main.o /data/*.o -l[..libs]

但在这里,我会收到从 main.cpp 到预编译 .c 文件调用的函数的“未定义引用”错误,这是我以前没有收到的错误。

有人可以帮忙吗?或者我是否需要提供更多信息?

编辑(更深入的代码摘录,我试图简化,否则将无法阅读,但让我知道如果我仍然需要添加内容,我会尝试删除不必要的代码):

主要.cpp:

#include "header.h"

int main(int argc, char** argv) {
    string s1 = argv[2];
    fn1(s1)
}

header.h

void fn1(string s1)

mycfile.c

#include "header.h"

void fn1(string s1){
    fprintf(stdout, " you entered %s", s1);
    fflush(stdout);
}

ANSWER:

@Smeehey 帮助我找到了解决方案,实际上我仍在使用的 .hpp 文件中包含旧标头。但核心解决方案确实是使用外部C{}。


这很可能与 C-vs-C++ 链接有关。在你的main.cpp,你可能有这样的事情:

#include <data/header.h>

where header.h指的是你的c 库。替换如下:

extern "C" {
#include <data/header.h>
}

这告诉您的 C++ 编译器在从标头定义所需符号时不要使用 C++ 风格的名称修饰,从而允许链接器在 C 编译的文件中成功找到它们.o files.

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

链接对象文件时出现“未定义的引用”错误[重复] 的相关文章

随机推荐

  • 未使用 QueryString id 参数

    我有一个非常基本的 ASP Net MVC 项目 我想在我的控制器操作之一上使用 id 参数名称 从我读过的所有内容来看 这应该不是问题 但由于某种原因 使用 id 参数名称无法获取从查询字符串中提取的值 但如果我将其更改为任何其他不同的名
  • 获取第n行文本输出

    我有一个每次生成两行作为输出的脚本 我真的只对第二行感兴趣 此外 我只对第二行一对 之间出现的文本感兴趣 此外 在散列之间还使用另一个分隔符 A 如果我还可以分解以 A 分隔的文本的每个部分 那就太好了 请注意 A 是 SOH 特殊字符 可
  • PowerShell,用另一种文化格式化值

    PowerShell 中有没有一种简单的方法可以在另一个语言环境中格式化数字等 我目前正在编写一些函数来简化我的 SVG 生成和 SVG 使用 作为小数点分隔符 而 PowerShell 遵循我的区域设置 de DE 将浮点数转换为字符串时
  • 检索 Windows 10 电源模式滑块的状态

    是否有任何 API 可以检索 Windows 10 电源模式滑块的状态 我在看Windows System Power名称空间 https learn microsoft com en us uwp api windows system p
  • GitHub Actions 工作流程错误:运行命令超时!即使剧本做得很好

    每次提交到存储库时 我想在远程服务器上部署 Nuxt js 应用程序 这是我的deploy yml name Deployment on push branches master jobs deploy name Deploy runs o
  • 分配多个 JsonProperty?

    我正在尝试创建一个包含来自 Facebook 和 Twitter 的信息的单个数据类 但在我来自 Twitter 的 JSON 回复中我需要id str我从 Facebook 得到id 我需要将这两个放入id 细绳 现在我知道我可以使用 J
  • WooCommerce:如何在价格和促销价格之前添加文本?

    我已成功地让文本显示在价格之前和促销价格之前 但文本被视为价格的一部分 而不是与其分开 Placing ins before content Betty s price color 000 font size 14px 在我的自定义 CSS
  • Flutter 嵌套行 MainAxisAlignment

    我想做这个 但这是我实际得到的 这是我的代码 Row itemTransaction BuildContext context Transaction transaction This is the function that will b
  • 如何配置 android 测试目录?

    Android gradle 构建强制我的 AndroidTests 位于 src androidTests 中 如何将其更改为我选择的另一个目录 这是一些背景 我正在从 eclipse 迁移一个项目 根据构建文档 当我将其添加到我的 gr
  • 重新启动 Vaadin 应用程序时抛出 java.io.NotSerializedException

    当我重新启动 Tomcat 时 出现以下错误 2014 10 01 15 49 47 055 WARN com vaadin event ListenerMethod localhost startStop 2 Error in seria
  • 如何判断一个对象是否是 Mockito 模拟对象?

    是否可以在代码中判断给定对象是否是 Mockito 模拟对象 我想这样做的原因是在使用模拟时返回不同的错误消息 这将用于向其他开发人员建议他们应该使用预先准备的模拟 该模拟已经设置为以有用的方式应答呼叫 而不是自己创建模拟 目前我拥有的最好
  • 《How To Make a Tile-Based Game with Cocos2D 2.X》用cocos2d V3制作本教程

    我有一个小问题 在本教程中如何使用 Cocos2D 2 X 制作基于图块的游戏 http www raywenderlich com 29458 how to make a tile based game with cocos2d 2 x使
  • 当活动处于后台或不在后台时,Firebase 通知不起作用

    我的编码与 firebase 示例代码提供的相同 当 Activity 处于前台状态或打开时 它可以正常工作 但是 当活动关闭或处于后台状态时 它就无法正常工作 问题是这样的 不显示应用程序的应用程序图标 默认情况下以应用程序名称作为通知标
  • 为什么基元的包装类没有 setter?

    包装类 如 Integer Double 等 没有为其内部原始值设置 setter 的原因是什么 我问这个问题是因为这种功能可以简化微积分 并使 Java 语言更加灵活 让我举一些例子 1 我们看下面的例子 Integer x new In
  • 通过adb获取sdcard目录

    我正在制作一个应用程序 它通过 adb 从设备 SD 卡中提取文件 由 Android 应用程序保存 问题是不同的设备 有不同的SD卡目录 i e sdcard SD卡 external sd 首先我发明了以下解决方案 运行 adb she
  • 如何解决“安装包:当前环境没有打开的解决方案。”

    我有一个包含 1 个项目的解决方案 打开包管理器控制台 运行 Install Package MSBuildTasks 但它给了我一个错误 Install Package The current environment doesn t ha
  • 使用 getActivity() 进行强制转换安全吗?

    我正在编写一个有父级的应用程序Activity和几个孩子Fragments 我正在尝试让片段与父活动进行通信 我知道有几种方法可以做到这一点 包括创建一个接口并在父活动中实现它 不过 我对这个方法很感兴趣 ParentActivity ac
  • 禁用 sympy 中的自动简化

    我想禁用 sympy 中的自动简化 例如求解方程x y x我想要得到x x代替1 import sympy from sympy abc import x y z expr x y x sympy solve expr y gt 1 i w
  • 为什么 `head` 需要 `()` 而 `shape` 不需要?

    在下面的代码中 我将 csv 文件导入到 Python 的 pandas 库中并显示前 5 行 并查询 pandas 数据框的 形状 import pandas as pd data pd read csv my file csv data
  • 链接对象文件时出现“未定义的引用”错误[重复]

    这个问题在这里已经有答案了 我意识到这个问题已经通过多种方式提出 包括这个非常全面的答案 https stackoverflow com questions 12573816 what is an undefined reference u