摘要:存在程序main通过dlopen使用libA中的符号: main.c: 1 #include <stdio.h> 2 #include <dlfcn.h> 3 4 typedef void (*func)(void); 5 6 7 void test_main() 8 { 9 return;10 }
阅读全文
随笔分类 - C++/C
摘要:引言 编译器是我们开发人员与机器指令之间的翻译,现在编译器越来越优化,而且基于一些开源的编译器项目(gcc,clang)等,相继出现不同platform下的编译器。此外,各种芯片、开发板层出不穷,各个商业公司都针对自己出产的开发板定制特定的编译链条。例如华为hisi系列的himix100中提供的编译
阅读全文
摘要:omit-frame-pointer 开启该选项,主要是用于去掉所有函数SFP(Stack Frame Pointer)的,即在函数调用时不保存栈帧指针SFP,代价是不能通过backtrace进行调试根据堆栈信息了。通过去掉SFP,可以提高程序运行速度,达到优化程序的目的。如果要打开栈指针,使用 -
阅读全文
摘要:rb report at bugs.python.orgWed Nov 26 10:13:39 CET 2008 Previous message: [New-bugs-announce] [issue4433] _ctypes.COMError crash Next message: [New-b
阅读全文
摘要:cimporterrormakefilemodulepython-2.7 undefined symbol: PyExc_ImportError when embedding Python in C 我正在开发一个C共享库,该库可以调用python脚本。当我运行应用程序时,出现以下错误: 12345
阅读全文
摘要:网上关于 target_link_libraries 中的 PRIVATE, PUBLIC , INTERFACE 的解释大部分是错的,而且不是一般的错,是胡说。 因为这三个属性在不同的命令中使用时意义不同,有很多是从target_include_libraries中抄来的。 以下的解释主要场景是l
阅读全文
摘要:#pragma pack 这条指令主要用作改变编译器的默认对齐方式。 pragma pack(show) //显示当前内存对齐的字节数,编辑器默认8字节对齐 #pragma pack(n) //设置编辑器按照n个字节对齐,n可以取值1,2,4,8,16 #pragma pack(push) //将当
阅读全文
摘要:离奇的std::map、std::set崩溃 现象描述定位之路1、和windows调用比较,没发现任何问题2、修改cmakelists.txt,发现也没有什么可以改的,能改的怎么改结果都一样3、最笨的办法之一用上,写一段这样的代码:4、面向互联网大法编程,百度、微软必应(不FQ,不能狗狗),发现一个
阅读全文
摘要:daemonizeMe // Copyright (c) 2017 Deep Aggarwal#include <getopt.h>#include <grp.h>#include <pwd.h>#include <stdlib.h>#include <syslog.h>#include <sys/
阅读全文
摘要:文章目录 一、如何采用Daemon进行后台程序的部署 1. 创建子进程 2. 终止父进程 3. 创建新的会话 4. 改变当前工作目录 5. 重设文件权限掩码 6.关闭不需要的文件描述 二. 代码示例 一、如何采用Daemon进行后台程序的部署 在C++中,如果要让一个程序一直在后台运行并且和终端会话
阅读全文
摘要:无论是在windows还是linux下我们都可以借助popen执行终端指令并获取到返回值。 /// 执行cmd指令并返回结果 string getCmdResult(const string &strCmd) { char buf[10240] = {0}; FILE *pf = NULL; if(
阅读全文
摘要:工作的时候遇到一个问题,需要把一个存储二进制网络流的buff转化为一个字符串进行存储。在网上搜了半天看到的方法都比较复杂。在这里介绍一种自己认为比较简便的方法。 二进制网络流一般都是unsigned char类型。跟char的区别在于读取的方式不同,但是存储的位数并没有什么不同。假设unsigned
阅读全文
摘要:本文章向大家介绍[C/C++知识点] 数字后面加U/L/F的含义,主要包括[C/C++知识点] 数字后面加U/L/F的含义使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 一、引言 写代码的时候往往需要定义许多常量,如int num=5等等,这个数字5显
阅读全文
摘要:今天是客户要求的最后期限,可突然发现一种操作方式下,程序会很容出现线程大面积卡住。 程序开了数十个线程,每个都会ping一个ip。 于是有人说是线程太多,有人说是发包太多,还有说是usleep会导致卡死。 gdb连接上卡死的程序: gdb main pid info threads发现确实很多程序处
阅读全文
摘要:写一个延迟函数,usleep是延迟函数有时导致线程阻塞会因为有定时器终止的信号(SIGALRM)产生时会一些未定义的情况,建议少用,我们目前都换成了select替代,具体代码如下 void Msleep(unsigned int MilliSecond) { struct timeval time;
阅读全文
摘要:#include<iostream> #undef NDEBUG #include<cassert> using namespace std; int main() { assert(1==2 ); cout<<"here"<<endl; } 输出 Assertion failed: 1==2, f
阅读全文
摘要:进程内存布局 我们写程序运行栈的栈帧保存在栈区,函数调用深度太多将导致爆栈栈的大小有上限,每个进程可以指定软上限,操作系统可指定硬上限 linux查看栈上限方法 linux可以通过ulimit命令查看栈上限和设置上限 ulimit -a 查看进程所有资源上限 ulimit -s xx 修改栈上限 也
阅读全文
摘要:有时候在Linux写C++程序处理大量的数据,程序内部需要分配很大的数组来存放一些数据,但有时候分配的数组太大的话运行时会出现段错误。这种情况可能是分配的数组大小超过了Linux系统的默认栈空间的大小了,导致栈空间不够分配,出现错误。 查看linux默认栈空间的大小通过命令 ulimit -s 查看
阅读全文
摘要:同样的代码程序: 主程序中释放了一块在 动态库(*.dll)或共享库(*.so) 中分配的内存, Windows 将会出现程序崩溃,而 Linux 则正常运行。 在 linux 下,每个进程只有一个 heap , 在任何一个共享库模块 *.so 中通过 new 或者 malloc 来分配内存的时候都
阅读全文
摘要:前言 对于 C 语言来说,内存被踩是比较常见的问题,轻则普通变量被改写程序逻辑出错,重则指针变量被改写引发指针解引用出现未定义行为风险; 定位内存被踩一直是棘手的难题,如果出现程序跑死,一般可以通过堆栈信息来定位:1)查看跑死的调用链,确定跑死代码的位置;2)根据pc指针找到具体代码;3)走查代码分
阅读全文