微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 是否有解决未定义参考/未解决符号问题的一般指导原则?

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

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

解决方法

如果你使用MSVC:

你不能通过设置一个标志来逃避这种类型的错误:它意味着一些单位(.cpp)不具有声明的标识符的定义.它肯定是由某个地方缺少包含或缺少对象定义(通常是静态对象)引起的.

在开发过程中,您可以遵循这些准则(从those articles开始),以确保所有cpp包含他们需要的所有标题,但不再包括

  • Every cpp file includes its own header file first. This is the most
    important guideline; everything else
    follows from here. The only exception
    to this rule are precompiled header
    includes in Visual Studio; those
    always have to be the first include in
    the file. More about precompiled
    headers in part two of this article.
  • A header file must include all the header files necessary to parse it.
    This goes hand in hand with the first
    guideline. I kNow some people try to
    never include header files within
    header files claiming efficiency or
    something along those lines. However,
    if a file must be included before a
    header file can be parsed,it has to
    be included somewhere. The advantage
    of including it directly in the header
    file is that we can always decide to
    pull in a header file we’re interested
    in and we’re guaranteed that it’ll
    work as is. We don’t have to play the
    “guess what other headers you need”
    game.
  • A header file should have the bare minimum number of header files
    necessary to parse it. The prevIoUs
    rule said you should have all the
    includes you need in a header file.
    This rule says you shouldn’t have any
    more than you have to. Clearly,start
    by removing (or not adding in the
    first place) useless include
    statements. Then,use as many forward
    declarations as you can instead of
    includes. If all you have are
    references or pointers to a class,you
    don’t need to include that class’
    header file; a forward reference will
    do nicely and much more efficiently.

但是正如评论者的建议,似乎你正在使用g …

原文地址:https://www.jb51.cc/c/111678.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐