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

删除C++ - STL/Boost调试符号(...或不创建它们)

在C++中,如果你希望在编译时不创建调试符号,或者删除已经存在的调试符号,可以使用以下方法:

  1. 在编译时不创建调试符号

可以使用-g0选项来告诉编译器不生成调试符号。例如,在GCC或Clang中,可以使用以下命令:

代码语言:txt
复制
g++ -g0 -o my_program my_program.cpp

在Microsoft Visual Studio中,可以通过以下方式取消调试符号的生成:

在项目属性页面 -> C/C++ -> 常规 -> 调试信息格式,选择“无”。

  1. 删除已经存在的调试符号

如果你已经编译生成了调试符号,可以使用strip命令(在Linux和macOS中)或者PDBCopy工具(在Windows中)来删除调试符号。

在Linux和macOS中,可以使用以下命令:

代码语言:txt
复制
strip my_program

在Windows中,可以使用PDBCopy工具,具体步骤如下:

首先,打开Visual Studio的开发人员命令提示符。

然后,运行以下命令以创建一个新的PDB文件,其中不包含调试符号:

代码语言:txt
复制
pdbcopy my_program.pdb my_program_stripped.pdb -p

最后,使用以下命令将新的PDB文件与可执行文件关联:

代码语言:txt
复制
pdbcopy my_program_stripped.pdb my_program.pdb -w

这样,你就可以删除C++中的调试符号了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)

主要特性有: 高效 语言中立(Cpp, Java, Python) 可扩展 官方文档 3.2 Boost.Serialization Boost.Serialization可以创建重建程序中的等效结构...该库具有以下吸引人的特性: 代码可移植(实现仅依赖于ANSI C++)。 深度指针保存与恢复。 可以序列化STL容器和其他常用模版库。 数据可移植。 非入侵性。...容器序列化 这个缺陷挺大,因为稍复杂点的数据结构类结构里出现二维数组、二维指针和STL容器(set、list、map等)很频繁,但因为protobuf简单的实现机制,只支持一维数组和指针(用repeated...注意2:boost库的安装依赖一些环境,通常有Python、bzip2和zlib,它们所在的软件包分别为: Ubuntu下: zlib1g-dev  libbz2-dev  libpython2.7...库 Boost C++库 - 序列化 Boost - 序列化 (Serialization) Boost - Serialization序列化

7K42

Thrift:可扩展的跨语言服务实现(中文翻译)

被Thrift支的基本类型是: bool 表示一个布尔值,取truefalse byte 表示一个带符号字节 i16 表示一个带符号16位整型 i32 表示一个带符号32位整 i64 表示一个带符号64...位整 double 表示一个带符号64为浮 数 string 表示一个不可知编码的文本二进制串 值得注意的是没有无符号整型。...在这种情况下,符号是无关的,有符号整型能够用于相同的目的,并且能够在必要的时候,安全的映射他们无符号的部分(在C++中常见)。 结构 一个Thrift结构定义了一个通用的对象以此来跨语言。...整型被转换成网络字节顺序,字符串在串头加入它们的字节长 ,所有的消息和字段头都使用原始整型序列化构造写入。字段的字符串名被删除,当使用产生代码时,字段标识已经足够。...对于Thread类的实现,boost::shared ptr的用法要求特别注意确保Thread对象们在创建关闭线程时没有泄漏也没有被过早引用。

93250
  • RAII_ras raf

    容器 1RAII简介 RAII [1] (Resource Acquisition Is Initialization),也成为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法...C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。...变性类型是指可以中途被设置为接管另一个资源,或者干脆被置为拥有任何资源。外部初始化类型是指资源在外部被创建,并被传给RAII实例的构造函数,后者进而接管了其所有权。...4RAII与STL容器 STL容器是基于值语义的,在容器内部,对象是常被复制的。如果RAII类型需要存入STL容器,需要作一些处理。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除

    40120

    SWIG 官方文档第二部分 - 机翻中文人肉修正

    接口文件可以根据需要查看这些符号,以更改生成接口的方式将 SWIG 指令与 C 代码混合。...在 C 中,对象是使用calloc()创建的。在 C++ 中,使用new。 type *delete_name(type *obj) 删除一个对象类型type。...该模块不提供任何安全性额外的包装层——它仅提供用于创建、销毁和修改原始 C 数组数据内容的功能。 %array_functions(type, name) 创建四个函数。...• 与其直接操作char *,不如考虑使用特殊的字符串结构类。 9.4 STL/C++ 库 本节中的库模块提供对包括 STL 在内的标准 C++ 库部分的访问。...b, double *OUTPUT); %} extern void add(double a, double b, double *OUTPUT); 类型映射一直有效,直到它们被明确删除重新定义为其他内容

    2.2K20

    C++服务编译耗时优化原理及实践

    大型C++工程项目,都会面临编译耗时较长的问题。不管是开发调试迭代、准入测试,亦或是持续集成阶段,编译行为无处不在,降低编译时间对提高研发效率来说具有非常重要意义。...预处理器:宏定义替换,头文件展开,条件编译展开,删除注释。 gcc -E选项可以得到预处理后的结果,扩展名为.i .ii。...如果头文件中有模板(STL/Boost),则该模板在每个cpp文件中使用时都会做一次实例化,N个源文件中的std::vector会实例化N次。 3....然后遍历所有目标文件的未解决符号表,并且在所有的导出符号表里查找匹配的符号,并在未解决符号表中所记录的位置上填写实现地址,最后把所有的目标文件的内容写在各自的位置上,就生成一个可执行文件。...在我们项目中主要使用的Boost函数超过二十个,部分可以在STL中找到替代,部分我们手动做了实现,使得项目从重度依赖Boost转变成绝大部分达到Boost-Free,大大降低了编译的负担。 5.

    1.9K20

    muduo网络库学习之ThreadLocal 类、ThreadLocalSingleton类封装知识点

    4、POSIX线程库通过维护一定的数据结构来解决这个问题,这些数据称为(Thread-specific Data, TSD)。...一旦某个线程创建了一个key,比如key[1],那么其他线程也有自己的key[1],它们通过各自的key[1]访问到的实际数据(堆上内存分配的空间)是不同的,pthread_key_delete 只是删除...,            STL.name().c_str()); } void threadFunc(const char *changeTo) {     print();     STL.setName...key 的删除在~Deleter() 中 ~Deleter() {       pthread_key_delete(pkey_); } 测试代码: ThreadLocalSingleton_test.cc...main one tid=3341, destructing 0x8a22028 main one 参考: muduo manual.pdf 《linux 多线程服务器编程:使用muduo c+

    1.3K00

    C++】基础:C++环境配置与基础语法

    除了标准 C++ 语言的基础特性外,C++ 标准库(STL)也提供了丰富的数据结构和算法库,可用于开发各种类型的应用程序。...此外,C++ 还有许多扩展库和框架,如 Boost、Qt、OpenCV 等,可以扩展其功能和应用范围。...在线书籍: C++ Primer Plus C++ 程序设计语言 STL Boost Asio 数据结构与算法 数据结构与算法2 代码随想录 并发 ModernCpp EffectiveCpp...标识符和关键字 标识符是用来标识变量、函数、类、模块任何其他用户需自定义项目的名称,以字母下划线开始,不能有标点符号(如value setValue ClassExample)。...C++类型限定符提供了变量的额外信息,用于在定义变量函数时改变它们的默认行为的关键字,包含const volatile restrict mutable static register,可以理解为常量是一种特殊的变量

    16010

    TPL: 一个新的C++正则表达式(regex)库

    概要 C++ 中正则表达式(regex)库已经很多。光 boost 中就有3个:regex、spirit、xpressive。那么我们为什么还需要一个新的呢?...例如 boost regex 就是这样。这类我们称之为动态正则表达式库。 spirit、xpressive 例外。他们直接通过重载 C++ 的操作符来表达一个正则表达式。.../ 符号我称之为“约束”“动作”。它是在一个规则(Rule)匹配成功后执行的额外操作。这个额外的操作可能是: 使用另一个Rule进行进一步的数据合法性检查。 赋值(本例就是)。...打印调试信息(正则表达式匹配比较难以跟踪,故此 Debug 能力也是 TPL 的一个关注点)。 其他用户自定义动作。 % 符号是列表算符(非常有用)。...支持+-*/、()、sin/cos/pow/max removecomments: 删除C++代码中的注释。 removecomments2: 还是C++代码中的注释。

    1.4K10

    STL小结

    C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的;一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++C++...STL又被添加进了C++库。1996年,惠普公司又免费公开了STL,为STL的推广做了很大的贡献。STL提供了类型安全、高效而易用特性的STL无疑是最值得C++程序员骄傲的部分。...STL的算法也是非常优秀的,它们大部分都是类属的,基本上都用到了C++的模板来实现,这样,很多相似的函数就不用自己写了,只要用函数模板就可以了。...c.clear();删除所有。 vector的reserve和resize reserve只分配空间,而创建对象,size()不变。...3)如果你有一个vector、string、deque数组,你需要鉴别出第n个元素你需要鉴别出最前的n个元素,而不用知道它们的顺序,nth_element是你应该注意和调用的。

    84310

    STL四种智能指针

    此外,Boost库还提出了boost::scoped_ptr、boost::scoped_array、boost::intrusive_ptr 等智能指针,虽然尚未得到C++标准采纳,但是实际开发工作中可以使用... u_i2(new int(4));//创建时指定动态对象 unique_ptr u(d); //创建空unique_ptr,执行类型为T的对象,用类型为D的对象d来替代默认的删除器...shared_ptr最初实现于Boost库中,后由C++11引入到C++ STL。...5.如何选择智能指针 上文简单地介绍了C++标准模板库STL中四种智能指针,当然,除了STL中的智能指针,C++准标准库Boost中的智能指针,比如boost::scoped_ptr、boost::shared_array...可将unique_ptr存储到STL容器中,只要不调用将一个unique_ptr复制赋值给另一个的算法(如sort())。例如,可在程序中使用类似于下面的代码段。

    2.7K41

    C ++ 中不容忽视的 25 个 API 错误设计!

    我还强烈建议你使用嵌套命名空间来进行功能分组将公共API与内部API分开。一个很好的例子是Boost库,它们可以自由地使用嵌套的命名空间。...例如,在根“boost”命名空间内,boost :: variant包含Boost Variant API的公共符号boost :: detail :: variant包含该API的内部详细信息。...客户端通过构造函数在eth堆栈上创建了类a1的实例。然后他通过从a1复制创建了另一个实例a2。当a1超出范围时,析构函数将删除底层int *的内存。...上面的“GRAVITY”的#defines的符号名称被预处理器删除,因此不会输入到符号表中。...如果确保版本之间的二进制兼容性,人们将被迫提供静态链接的二进制文件。静态二进制文件很糟糕,因为它们浪费资源(尤其是内存)不允许程序从库中的错误修复扩展中受益。

    1.5K20

    Effective STL笔记

    #estl 第50条:熟悉与STL相关的web站点。三个:www.sgi.com/tech/stl、www.stlport.org 和 www.boost.org。...#estl 第49条:学会分析与STL相关的编译器诊断信息。嗯,第一招是替换大法,然后介绍了一下与容器、插入迭代器、绑定器、输出迭代器算法相关的错误大概有什么套路看。...因为C++标准没有规定头文件的互相包含关系,所以不同的STL实现有所不同。要记住容器基本上声明在同名文件中,算法是algo..和 num.....boost::shared_ptr是一个好选择。 #estl 第32条:如果确实需要删除元素,则需要在remove这一类算法之后调用erase。...果然温故知新,这一条耗了我好几个编译代码的时间……可能仍然需要再重读几遍,鹅米豆腐…… #estl 第8条:切勿创建包含auto_ptr的容器对象;第9条:慎重选择删除元素的方法。

    34410

    蓝桥ROS机器人之现代C++学习笔记第 8 章 文件系统

    该库的动机是需要在 C++ 程序中执行可移植的类似脚本的操作。其目的不是与 Python、Perl shell 语言竞争,而是在 C++ 已经是首选语言时提供可移植的文件系统操作。...C++ 标准委员会接受了在技术报告 2 中包含 Boost.Filesystem 的提案 N1975。...如果底层文件系统不支持某些功能(例如 FAT 文件系统缺少符号链接并禁止多个硬链接),则它们可能不可用。在这些情况下,必须报告错误。...如果支持多个硬链接,则在删除最后一个硬链接后删除文件。 符号链接:将名称与路径相关联的目录条目,该路径可能存在也可能不存在。 其他特殊文件类型:块、字符、fifo、套接字。...规范路径:包含符号链接的绝对路径,“.”“..”元素。 相对路径:标识文件相对于文件系统上某个位置的位置的路径。特殊路径名“.”

    67820

    C++智能指针

    此外,Boost库还提出了boost::scoped_ptr、boost::scoped_array、boost::intrusive_ptr 等智能指针,虽然尚未得到C++标准采纳,但是实际开发工作中可以...C++准标准库Boost中的智能指针,比如boost::scoped_ptr、boost::shared_array、boost:: intrusive_ptr在这里不做研究,有兴趣的读者可以参考:C+... u_i2(new int(4));//创建时指定动态对象 unique_ptr u(d); //创建空unique_ptr,执行类型为T的对象,用类型为D的对象d来替代默认的删除器...在掌握了上面提到的C++ STL中的四种智能指针后,大家可能会想另一个问题:在实际应用中,应使用哪种智能指针呢? 下面给出几个使用指南。...可将unique_ptr存储到STL容器中,只要不调用将一个unique_ptr复制赋值给另一个的算法(如sort())。例如,可在程序中使用类似于下面的代码段。

    3.5K30

    看完这 7 条,模拟 C++ 新功能只是一个小目标!

    例如copy_if,all_of,以及其类似的any_of和none_of。 听起来令人惊讶,但在C++ 11之前它们并不是标准算法。...它们C++ 11中引入的,在C++ 17中更多属性被加了进来。...当C++(以及我们的代码库)实际引入概念时,良好的命名可以让我们的代码非常妥帖。 5 范围算法 STL是一个很棒的库,但有个东西用起来有点麻烦:迭代器。...比如std::optional,std::variant,这两者出现在C++ 17中。如果你没有C++ 17,那么想要编写自己的实现并可靠地替换标准库的接口并通过完整的测试,并不是件容易的事情。...仅次于标注库的就是Boost。它实现了一些组件,包括Optional、Variant以及一些更先进的STL算法。

    67610

    C++】开源:Boost进程间通信库InterProcess配置使用

    /libs/1_83_0/doc/html/interprocess.html Boost.InterProcess是Boost库中的一个模块,提供了用于在C++中进行进程间通信和共享内存操作的功能。...Boost.InterProcess提供了以下主要功能: 1.共享内存段(Shared Memory Segments):Boost.Interprocess允许创建具有命名匿名标识符的共享内存段。...共享内存容器提供了与STL容器相似的接口和功能,但可以用于多个进程之间的数据共享。...Boost.Interprocess是一个功能强大且灵活的库,它具有跨平台的特性,可以在各种操作系统上使用。它提供了简单而一致的接口,使得在C++中使用共享内存变得更加方便和安全。...> #include using namespace boost::interprocess; int main() { // 创建打开共享内存对象 shared_memory_object

    34410
    领券