是否有解决未定义的引用/未解决的符号问题的通用准则?

2023-11-24

我在工作中遇到了几个“未定义的引用”(在链接期间)和“未解析的符号”(在 dlopen 之后的运行时期间)问题。这是一个相当大的 makefile 系统。

是否有链接库和使用编译器标志/选项来避免这些类型的错误的通用规则和指南?


如果您使用的是 MSVC :

您无法通过设置标志来避免此类错误:这意味着某些单元(.cpp)没有声明的标识符的定义。这肯定是由于某处缺少包含或缺少对象定义(通常是静态对象)引起的。

在开发过程中,您可以遵循这些准则(来自那些文章)以确保您的所有 cpp 包含它们需要的所有标头,但仅此而已:

  • 每个 cpp 文件首先包含自己的头文件。这是最 重要指导方针;其他一切 从这里开始。唯一的例外 这条规则是预编译头 包含在 Visual Studio 中;那些 总是必须是第一个包含在 文件。有关预编译的更多信息 本文第二部分的标题。
  • 头文件必须包含解析它所需的所有头文件。 这与第一个齐头并进 指导方针。我知道有些人试图 永远不要在其中包含头文件 声称效率的头文件或 沿着这些思路的东西。然而, 如果文件必须包含在 头文件可以被解析,它必须 被包含在某个地方。优势 直接将其包含在标题中 文件是我们总是可以决定 拉入我们感兴趣的头文件 我们保证它会 按原样工作。我们不必玩 “猜猜你还需要什么其他标题” 游戏。
  • 头文件应该具有最少数量的头文件 需要解析它。以前的 规则说你应该拥有所有 包含您需要的头文件。 这条规则规定你不应该有任何 比你必须做的更多。明确,开始 通过删除(或不添加 第一名)无用的包括 声明。然后,使用尽可能多的转发 尽可能声明而不是 包括。如果你拥有的只是 指向类的引用或指针,您 不需要包含该类' 头文件;前向参考将 做得更好,更有效率。

但正如评论者所建议的,您似乎正在使用 g++...

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

是否有解决未定义的引用/未解决的符号问题的通用准则? 的相关文章

  • MVC Core IActionResult 含义

    什么是IActionResult 我尝试查看 MSDN 和其他网站 但需要通用 常见 易于理解的答案 MSDN IActionResult https learn microsoft com en us dotnet api microso
  • 为什么在 C# 中成员初始值设定项中不允许这样做,但在 VB.Net Me 中允许

    我正在将 VB Net 应用程序转换为 C 并注意到在 VB Net 代码中 有一个私有成员变量 它是使用Me像这样 Private m ClassA As New MyCollection Of ClassA Me 当我将其转换为 C 代
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • C++ 模板中的名称查找

    我有一些 C 代码 如果没有 fpermissive 选项 就无法再编译 这是我无法分享的专有代码 但我认为我已经能够提取一个简单的测试用例来演示该问题 这是 g 的输出 template eg cpp In instantiation o
  • 隐式方法组转换陷阱

    我想知道为什么给定代码的输出 在 LinqPad 中执行 void Main Compare1 Action Main Dump Compare2 Main Dump bool Compare1 Delegate x return x Ac
  • 避免集合已修改错误

    Issue 我有以下代码 foreach var ItemA in GenericListInstanceB ItemA MethodThatCouldRemoveAnyItemInGenericListInstanceB 显然我得到一个错
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 如何从 List 中的字符串中删除数字/数字?

    我有一个字符串列表 List
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • C++ 私有静态成员变量

    此 C 代码在编译时产生链接器错误 A h class A public static void f private static std vector
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 控制器中的异常处理 (ASP.NET MVC)

    当您自己的代码抛出异常并从控制器中的操作调用时 应该如何处理 我看到很多最佳实践的例子 其中根本没有 try catch 语句 例如 从存储库访问数据 public ViewResult Index IList
  • 如何防止字符串被截留

    我的理解 可能是错误的 是 在 C 中 当你创建一个字符串时 它会被实习到 实习生池 中 这保留了对字符串的引用 以便多个相同的字符串可以共享操作内存 但是 我正在处理很多很可能是唯一的字符串 一旦完成每个字符串 我需要将它们从操作内存中完
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • 实体框架代理创建

    我们可以通过使用来停止在上下文构造函数中创建代理 this Configuration ProxyCreationEnabled false 在 EF 4 1 中创建代理有哪些优点和缺点 代理对于两个功能是必需的 延迟加载 导航属性在第一次
  • 在代码中而不是 XAML 中呈现 UserControl

    我想用RenderTargetBitmap将 UserControl 呈现为位图 而无需为其编写 XAML 当我这样做时 我得到一张空白图像 我是否错过了关键的一步 ValTool Controls VideoFisheyeOverlayC
  • 在类中使用 std::chrono::high_resolution_clock 播种 std::mt19937 的正确方法是什么?

    首先 大家好 这是我在这里提出的第一个问题 所以我希望我没有搞砸 在写这篇文章之前我用谷歌搜索了很多 我对编码 C 很陌生 我正在自学 考虑到有人告诉我 只为任何随机引擎播种一次是一个很好的做法 我在这里可能是错的 什么是正确 最佳 更有效

随机推荐

  • 使用头文件有哪些优点和缺点? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我对 Java C Scala 等编程语言以及 C C Objective C 等较低级编程语言有一些经验 我的观察是 低级语言尝试将头文件和实现文件分开 而其他高级编程语言从不将其分开
  • 在单元测试方法中显示 Windows 窗体

    我刚刚在 Visual Studio NET 中发现了单元测试项目 并使用测试方法来设置我开发的全局代码的示例 一些全局方法涉及显示可重用的对话框 例如日期选择器和输入框 问题是 有时表格会显示 有时则不会 我认为这与模态有关 因为我有一个
  • Kotlin:“return@”是什么意思?

    我在我的一个项目中使用 RxJava 我使用 Android Studio 插件和地图之一将我的类之一转换为 KotlinflatMaplambda java 中的 Func1 中间体返回如下所示 Func1 我不懂这啥意思 somethi
  • 将两个数据框逐个元素粘贴在一起

    我需要逐个元素粘贴两个数据帧的内容以输入到另一个程序 我有一个平均值数据框和一个平均值标准误差数据框 我尝试使用 R Paste 函数 但它似乎无法处理数据框 使用向量时 似乎将第一个向量的所有元素连接到一个字符串中 并将第二个向量的所有元
  • Javascript 中使用双括号调用函数

    当我调用函数时hi 带双括号的函数显示hi输出 它也会给出错误 说hi不是函数 使用的意义是什么 带函数名 如果出现以下情况 双括号会很有用 hi返回了一个函数而不是它的名称 就像 function hi return hello hi 这
  • 查找包含另一个字符串中一个字符串的所有字符的最小窗口的长度

    最近我接受了采访 我做得不好 因为我被以下问题卡住了 假设给出一个序列 A D C B D A B C D A C D 搜索顺序如下 A C D 任务是找到给定字符串中的开始和结束索引 该索引包含保留顺序的搜索字符串的所有字符 Output
  • 如何重载打印函数来扩展其功能?

    我想知道是否有内置功能print可以被覆盖 以便以下语句将同时写入控制台和文件 print test0 test1 test2 sep n 另外 我想知道是否可以修改内置的源代码print功能 使用装饰器 简化示例 def my decor
  • Android 编辑文本 - 光标停留在起始位置

    我在我的项目中使用编辑文本 问题是 每当我在文本框中输入任何内容时 它都会显示出来 但无论我输入多少个字符 光标都不会从其起始位置移动 此外 我无法通过单击文本框中的任何特定字符来移动 我的包含编辑文本的 xml 文件是这样的
  • 如何知道 PHAsset 是否已被修改?

    更具体地说 你如何知道一个PHAsset标的资产的当前版本是否与原始版本不同 我的用户只需在必要时在当前资产或原始资产之间进行选择 然后我需要他们的答案PHImageRequestOptions version 从 iOS 16 开始 PH
  • 如何打开 Chrome DevTools 命令菜单?

    人们如何访问下面屏幕截图中的命令菜单 If you re unable to use keyboard shortcut Cmd Ctrl Shift P you can also click the three stacked dots
  • WPF 中的 x:Reference 何时解析?为什么 XAML 元素顺序会影响它?

    x 在 XAML 中重新排列元素后 无法解析引用 这里我展示一个工作代码 只需移动 DataGrid 元素 使其位于按钮元素之后 ContextMenu 中的 MenuItem 和 Button IsEnabled 中的 MultiBind
  • QTreeWidget 通过拖动重新排序子项

    我有一个 QTreeWidget 它仅显示单个根节点和一级子节点 我需要允许子节点的重新排序 他们绝不能被重新养育 这就是我在 QTreeWidget 中启用项目拖动的方法 ui gt levelElements gt setSelecti
  • 将 RGB 转换为光频率

    是否可以从 RGB 表示中获取颜色的光频率 我发现了相反的过程 1 但我不知道这种方式是否可行 1 http www fourmilab ch documents specrend AFAIK 没有直接的答案 因为多个波长可以组合起来给出相
  • 将 RGB 转换为 RGBA 白色

    我有一个十六进制颜色 例如 F4F8FB or rgb 244 248 251 我想转换成尽可能透明rgba 颜色 显示在白色上时 合理 我正在寻找一种算法 或者至少是一种如何做到这一点的算法的想法 例如 rgb 128 128 255 g
  • 沙箱 JSR-223

    我正在尝试对 JSR 223 进行沙箱处理 具体来说 我不希望任何脚本访问我的任何类 我听说 Rhino 可以使用 ClassShutter 做到这一点 但我想一般地做到这一点 即对于 JSR 223 的所有脚本引擎 我首先尝试使用Acce
  • AngularJS + jQuery Mobile,无适配器和禁用路由 - 仅用于 UI 样式

    我正在学习 AngularJS 并构建了一个小型应用程序 现在它的功能已经完成 我想使用 jQuery Mobile 对其进行设计 本来我是掉进去的tigbro 的 jquery mobile angular adapter 但最终认为它比
  • 用公式作为变量运行小鼠:即时评估而不是稍后评估?

    The R包裹mice附带以下示例 library mice imp lt mice nhanes fit lt with data imp exp lm bmi hyp chl 我想要一个灵活的调用with like model form
  • 如何在Python中进行二分法

    我想制作一个 Python 程序 它将运行二分法来确定以下各项的根 f x 26 85x 91x2 44x3 8x4 x5 二分法是一种用于估计多项式 f x 根的数值方法 是否有任何可用的伪代码 算法或库可以用来告诉我答案 基本技术 下面
  • 如何从 Firefox 扩展执行页面定义的 JavaScript 函数?

    我正在创建一个 Firefox 扩展用于演示目的 我从扩展调用文档中的特定 JavaScript 函数 我在 HTML 文档中写了这个 不是在扩展内 而是由 Firefox 加载的页面 document funcToBeCalled fun
  • 是否有解决未定义的引用/未解决的符号问题的通用准则?

    我在工作中遇到了几个 未定义的引用 在链接期间 和 未解析的符号 在 dlopen 之后的运行时期间 问题 这是一个相当大的 makefile 系统 是否有链接库和使用编译器标志 选项来避免这些类型的错误的通用规则和指南 如果您使用的是 M