首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux命令(63)——nm令

符号的值表示该符号需要的字节数。例如在一个C文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C,否则其类型为B。...主要用于small object提高访问small data object的一种方式 i 这是对标准ELF符号类型集的GNU扩展。...u 符号是唯一的全局符号。这是GNU对标准ELF符号绑定集的扩展。对于这样的符号,动态链接器将确保在整个过程中只有一个使用此名称和类型的符号。...当链接未定义的弱定义符号,弱符号的值将变为零,且没有错误。在某些系统上,大写表示已指定默认值 w,W 该符号是一个弱符号,未专门标记为弱对象符号。...当弱定义符号与正常定义符号链接时,使用正常定义符号时不会出错。当链接未定义的弱未定义符号时,该符号的值将以系统特定的方式确定,且不会出错。

5.2K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    错误使用 C++ 模板特化产生的坑

    今天在群里看到了一个错误使用 C++ 模板特化产生的坑,有点意思,这里记录一下。...当编译器链接 .o 的时候,它会将 .o 中的符号全部链接进最终文件中,而当链接 .a 的时候,编译器则是会看当前链接结果是否存在未定义的符号,如果没有,那就不链接这个 .a 文件里面的内容。...问题虽然就这样解决了,但是刚刚的描述好像有点不对劲。我们说之前错误的写法会导致编译器自动实例化模板,而链接 .o 文件的时候,又会将 .o 中的符号链接进最终结果里,那这个时候怎么就没产生符号冲突呢?...两个 object 文件,我们可以用 nm 命令查看其中的内容,我们可以先看看之前错误的版本中,main.o 和 a.o 二者的符号情况: > nm main.o #...b _ZStL8__ioinit 可以看到,这里的 _ZN1AIiE5printEv 前面标记了 U,这说明这是一个未定义的符号,需要在外部查找,这就是为什么在正确实现的版本中,编译器会去查找 .a

    41930

    CG007蓝宝书opengl宝典源码编译环境的搭建

    需要的库 glew freeglut 及作者自己写的GLTools库 着三个库在源码光盘里面都有了,需要编译生成相应的库,或者从网络下载 出错提示及解决办法 1....错误 LNK2019 无法解析的外部符号 __except_handler4_common,该符号在函数 __except_handler4 中被引用 错误 LNK2019 无法解析的外部符号 __...错误LNK2019 无法解析的外部符号 _glutDisplayFunc 链接阶段出了问题 在nuget中下载glut,注释掉#define FREEGLUT_STATIC。...一些标准库的函数链接不到 解决方案找到了。 在vs2015工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可。...出现这个问题的原因是vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。

    1.9K40

    【C语言】解决C语言报错:Undefined Reference

    简介 Undefined Reference(未定义引用)是C语言编译过程中常见的错误之一,通常在链接阶段出现。当编译器无法找到函数或变量的定义时,会报告未定义引用错误。...什么是Undefined Reference Undefined Reference,即未定义引用,是指在编译过程中,链接器无法找到被引用的函数或变量的定义。...编译器在编译每个源文件时生成目标文件(.o文件),链接器负责将这些目标文件链接成最终的可执行文件。如果链接器找不到某个引用的符号的定义,就会产生未定义引用错误。...在file1.c中定义,但在file2.c中未包含相应的声明,导致未定义引用错误。...GCC手册:掌握GCC编译器的高级用法和选项。 《The C Programming Language》:由Brian W. Kernighan和Dennis M.

    85320

    你该知道的C++四种显式类型转换

    << std::endl; return 0; } 未定义行为:C++标准对此类行为没有做出明确规定.同一份代码在使用不同的编译器会有不同的效果.在 vs2017 下,,虽然代码中 c_val..., use_val , ptr_val 看到的地址是一样的.但是c_val的值并没有改变.有可能在某种编译器实现后,这一份代码的c_val 会被改变.也有可能编译器对这类行为直接 error 或 warning...,也与编译器的属性设置有关.所以不能完全使用C语言的强制转换替代,它也是最常有用的,最不可缺少的一种强制转换....val is: 00000000 // VS2017的C++编译器,对此类错误的转换赋值为nullptr */ 从上边的代码和输出结果可以看出: 对于从子类到基类的指针转换 ,dynamic_cast...) A pointer to an object to a pointer to an object of a different type (从一个指向对象的指针转向另一个不同类型的指向对象的指针)

    1.9K20

    连接器工具错误lnk2019_2019年十大语文错误

    所有这些都涉及到链接器无法解析的函数或变量的引用,或查找的定义。 编译器可以确定符号未声明的时间,但无法判断符号未定义的时间。 这是因为定义可能位于不同的源文件或库中。...如果某个符号被引用但从未定义,则链接器将生成一个无法解析的 :::no-loc(extern)::: al 符号错误。...但是,从 Visual Studio 2010 开始,Visual Studio 需要一个项目到项目的引用。 如果你的项目没有项目到项目的引用,则可能会收到此链接器错误。.../:::no-loc(VERBOSE):::链接器选项可帮助你确定链接器引用了哪些文件。 此选项可帮助您验证您的生成中是否包括包含符号定义的文件。...其他资源 有关 LNK2001 的可能原因和解决方案的详细信息,请参阅 Stack Overflow 问题:未定义的引用/未解析的 ” :::no-loc(extern)::: 符号错误”,以及如何修复该错误

    4.1K20

    【C++】OpenGL:freeglut环境配置与基础示例

    FreeGLUT介绍 FreeGLUT(Free OpenGL Utility Toolkit)是一个开源的替代性GLUT库,它提供了类似于GLUT的功能,并在其基础上进行了扩展和改进。...FreeGLUT的目标是提供一个跨平台、功能丰富且易于使用的工具库,用于OpenGL程序开发。...4.定时器:类似于GLUT,FreeGLUT也支持定时器功能。你可以通过设置回调函数实现定时执行某些操作,如动画效果、游戏循环等。...5.扩展功能:FreeGLUT通过增加一些额外的功能来扩展原始的GLUT库。例如,它支持菜单和子菜单的创建和管理,支持鼠标滚轮事件、支持多种输入设备等。 2....环境安装与配置 下载链接:https://packages.msys2.org/package/mingw-w64-x86_64-freeglut 可以在这里下载基于mingw64编译的freeglut

    38210

    C++:16---强制类型转换和类型转换

    旧式的强制类型转换 在早期C/C++中,显式地进行强制类型的转换有以下两种形式: type (expr) ; //函数形式的强制类型转换 (type) expr; //...C语言风格的强制类型转换 比如: char c = '12'; int b = (int)c; float f = float(b); C++的新式强制类型转换...注意事项: 使用static_cast会去除编译器的警告,但是我们必须自己清楚转换有效,否则转换无效可能会产生未定义的结果 演示案例 我们将一个整型对象转换为double类型 int i = 10,...char *p = const_cast(pc); 当我们去掉某个对象的const性质之后,编译器就不再阻止我们对该对象进行写操作了,因此写操作会产生未定义的后果 演示案例 const_cast...例如: int *ip;char *pc = reinterpret_cast(ip);//编译器虽然不报错,但是后果未定义string str(pc); 四、dynamic_cast dynamic_cast

    2K20

    C++编程经验(7):delete之后到底要不要置空?

    很不幸的是,对于这种逻辑错误开发者往往没有特别好的手段可以规避掉,二次delete一个悬垂指针行为是未定义的,也就是说错误是有可能被隐藏的。...先来理一下nullptr和野指针/悬垂指针的区别: 解引用: nullptr:未定义 野指针/悬垂指针:未定义 delete nullptr:良好定义,delete什么也不用做 野指针/悬垂指针:未定义...这个结论还可以引申一下:如果资源与其所有的持有者(含弱引用)一同被销毁,那即将消亡的持有者们都没有必要,也没有能力为资源的后续状态负责。...另一方面,你不能通过一次试的结果得出结论。因为那只能说明在特定编译器、特定crt下的结果。原理上你得知道delete是不改变指针值的。所以第二次delete的时候,行为未定义,什么事情都可能发生。...---- 又有反方大佬出场: delete 后置为 nullptr 在 C++ 中一般是不必要的,因为 C++ 可以用 RAII 来管理内存,而析构函数是被编译器保证只执行一次的。

    2.8K20

    ELF文件从形成到加载轮廓

    如果源代码包含外部函数或变量引用(未定义符号),目标文件会记录这些符号的重定位信息,供链接器解析。...链接阶段可能出现错误,如“undefined reference”(未定义引用),通常因缺少库文件或符号定义不一致引起。....got.plt:全局偏移表和过程链接表,用于动态链接,保存共享库函数的间接引用地址,运行时由动态链接器修改。...未定义符号(Undefined Symbols): 如果源码引用了外部函数或变量(如标准库的 printf),但未在当前文件定义,.symtab 会标记这些符号为 UND(未定义),等待链接器从其他目标文件或库...编译器创建 .symtab Section,记录符号的名称、类型和临时地址(相对于 Section 的偏移)。 如果符号是外部引用(未定义),标记为 UND,等待链接器处理。

    7410

    C++转型操作符 VS 强制类型转换:为何前者更胜一筹?

    2.2 安全性C++的转型操作符提供更高安全性,如 dynamic_cast 在运行时检查转换有效性:对于指针,转换不合法会返回 nullptr。对于引用,会抛出异常。...C 风格强制类型转换仅在编译时进行,不考虑转换合法性,可能导致运行时错误。...2.3 精确性C++的转型操作符更精确,例如 const_cast 专门用于修改 const 或 volatile 属性,C 风格强制类型转换无法实现此功能,可减少类型转换错误。...Base 类对象,会导致未定义行为和程序崩溃。...四、结论C++的转型操作符在可读性、安全性和精确性方面优于 C 风格的强制类型转换,虽可能稍复杂,但可清晰表达程序员意图,减少类型转换错误,提高代码质量、可维护性,减少运行时错误,使程序更健壮,建议在

    8400

    总结c++ primer中的notes

    long double 类型提供的精度通常没有必要,而且还需要承担额外的运行代价。 建议:不要依赖未定义行为 使用了未定义行为的程序都是错误的,即使程序能够运行,也只是巧合。...未定义行为源于编译器不能检测到的程序错误或太麻烦以至无法检测的错误。...C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在该变量上的操作集。C++ 程序员常常把变量称为“变量”或“对象(object)”。...预处理器变量有两种状态:已定义或未定义。定义预处理器变量和检测其状态所用的预处理器指示不同。#define 指示接受一个名字并定义该名字为预处理器变量。...#ifndef 指示检测指定的预处理器变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到出现#endif。

    1.6K90
    领券