首页
学习
活动
专区
圈层
工具
发布

Linux命令(63)——nm令

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

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

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

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

    1K30

    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默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。

    2.2K40

    【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.

    2.1K20

    你该知道的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 (从一个指向对象的指针转向另一个不同类型的指向对象的指针)

    2.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

    79510

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

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

    5.6K20

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

    引言 未定义引用(Undefined Reference)是 C++ 编程中常见的错误之一,通常在链接阶段出现。当编译器无法找到函数或变量的定义时,就会引发未定义引用错误。...0; } 缺少链接库 当使用外部库中的函数或变量时,如果未在链接时指定对应的库,会导致未定义引用错误。...return 0; } 未定义引用的检测方法 编译器错误信息 编译器会在链接阶段提供详细的错误信息,指出未定义引用的具体位置和原因。...通过编译器提供的错误信息,可以定位未定义引用的位置,并进行修复。 添加链接库 在编译时,添加所有需要的链接库。...总结 未定义引用是 C++ 编程中常见的错误之一。通过了解其成因、检测方法及预防和解决方案,可以帮助开发者在编写 C++ 程序时避免和处理这一问题。

    53410

    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

    2.4K20

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

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

    3.1K20

    ELF文件从形成到加载轮廓

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

    86410

    C++11 unique_ptr 原理与详细教程

    (通过右值引用实现所有权转移)当 unique_ptr 被销毁时,其管理的对象也会被自动删除2.2 简化版 unique_ptr 实现下面通过实现一个简化版的 unique_ptr 来理解其工作原理:#...::foo" return 0;}注意:基类析构函数必须为虚函数,否则会导致未定义行为。...::make_unique(); // 自动移动返回}int main() { auto obj = create_object(); // 接收返回的 unique_ptr...unique_ptr 析构时会再次释放避免在 C 风格函数中使用 unique_ptr // 错误示例:C 函数不知道 unique_ptr 的存在 void c_function(int* p...lambda 作为删除器六、总结std::unique_ptr 是 C++ 中管理独占资源的首选智能指针,通过独占所有权和移动语义,在保证性能的同时有效避免内存泄漏。

    41611

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

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

    27100
    领券