是否有解决未定义参考/未解决符号问题的通用准则? [英] Are there general guidelines for solving undefined reference/unresolved symbol issues?

查看:32
本文介绍了是否有解决未定义参考/未解决符号问题的通用准则?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在工作的地方遇到几个未定义引用"(在链接期间)和未解析符号"(在dlopen之后的运行期间)问题.这是一个很大的makefile系统.

I'm having several "undefined reference" (during linkage) and "unresolved symbol" (during runtime after dlopen) issues where I work. It is quite a large makefile system.

是否存在用于链接库以及使用编译器标志/选项规避这些类型错误的通用规则和准则?

Are there general rules and guidelines for linking libraries and using compiler flags/options to evade these types of errors?

推荐答案

如果您使用的是MSVC:

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

IF YOU WERE USING MSVC :

You cannot evade this type of error by setting a flag : it means some units (.cpp) dont' have definitions of declared identifiers. It's certainly caused by missing includes or missing object definitions (often static objects) somewhere.

在进行开发时,您可以遵循这些准则(来自这些文章),以确保所有cpp包括他们需要的所有标头,但不再包含所有内容:

While developing you can follow those guidelines ( from those articles ) to be sure all your cpp includes all the headers they need but no more :

  • 每个cpp文件都首先包含其自己的头文件.这是最重要准则;其他一切从这里开始.唯一的例外这个规则是预编译头包含在Visual Studio中;那些始终必须是第一个包含文件.有关预编译的更多信息本文第二部分的标题.
  • 头文件必须包含解析它所必需的所有头文件.这与第一个并驾齐驱准则.我知道有人尝试永远不要在其中包含头文件声称效率的头文件或遵循这些原则.然而,如果必须在文件之前包含文件头文件可以解析,它必须被包括在某个地方.优势直接将其包含在标题中文件是我们可以随时决定提取我们感兴趣的头文件进入,我们保证会按原样工作.我们不必玩猜测您还需要什么其他标题"游戏.
  • 头文件应具有最少的头文件数量解析它是必要的.以前的规则说你应该拥有所有在头文件中包含您需要的内容.这条规则说你不应该有任何比您必须要做的更多.显然,开始通过删除(或不添加第一名)没用陈述.然后,使用尽可能多的前进尽可能声明而不是包括在内.如果你有引用或指向类的指针,您不需要包括该课程."头文件;前瞻性参考做得更好,效率更高.

但是,正如评论者所建议的那样,看来您正在使用g ++ ...

But as commenter have suggested, it seem you're using g++...

这篇关于是否有解决未定义参考/未解决符号问题的通用准则?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆