既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
借鉴博客
https://blog.csdn.net/whahu1989/article/details/82078563#t5
make 编写生成动态库 失败
### 4、linux zlog日志库
借鉴博客
https://blog.csdn.net/wangqingchuan92/article/details/107338690/
https://www.cnblogs.com/superPerfect/p/3617716.html
https://blog.csdn.net/sinat\_36436112/article/details/105921759?utm\_term=zlog%E6%97%A5%E5%BF%97%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&utm\_medium=distribute.pc\_aggpage\_search\_result.none-task-blog-2allsobaiduweb~default-0-105921759&spm=3001.4430
http://hardysimpson.github.io/zlog/ 下载最新的zlog源码包以及代码直接输出配置文件
https://blog.csdn.net/fireblue1990/article/details/55808086
获取本地时间 创建文件夹mkdir函数 注意操作mode |来组合
void GetTimeEx2(char *pBuf)
{
time_t nt;
time(&nt);
struct tm *local;
local = localtime(&nt);
sprintf(pBuf, "%04d%02d%02d", local->tm_year + 1900,
local->tm_mon + 1,
local->tm_mday);
}
bool InitLogFile(void)
{
int rc;
char *szAppPath;
szAppPath = getcwd(NULL, 0);
char szTime[32] = { 0 };
GetTimeEx2(szTime);
char szConfigPath[10000] = { 0 };
sprintf(szConfigPath, "%s/zlog.conf", szAppPath);
char szLogFilePath[10000] = { 0 };
sprintf(szLogFilePath, "%s/log", szAppPath);
if (access(szLogFilePath, 0) < 0)
mkdir(szLogFilePath, S_IRWXU | S_IRWXG);
char szLogFilePathEx[1000] = { 0 };
sprintf(szLogFilePathEx, "%s/log/DesktopRecord-%s.log", szAppPath, szTime);
FILE *pFile = fopen(szConfigPath, "wb");
if (pFile)
{
char *pWriteData = "[formats]\n";
fwrite(pWriteData, 1, strlen(pWriteData), pFile);
char *pWriteData2 = "my = \"%d|%V| %m%n\"\n";
fwrite(pWriteData2, 1, strlen(pWriteData2), pFile);
char *pWriteData3 = "[rules]\n";
fwrite(pWriteData3, 1, strlen(pWriteData3), pFile);
//char *pWriteData4 = "my_cat.DEBUG >stdout;my\n";
//fwrite(pWriteData4, 1, strlen(pWriteData4), pFile);
char szData[1000] = { 0 };
sprintf(szData, "my_cat.DEBUG \"%s\";my\n", szLogFilePathEx);
fwrite(szData, 1, strlen(szData), pFile);
fclose(pFile);
pFile = NULL;
}
rc = dzlog_init(szConfigPath, "my_cat");
if (rc) {
return false;
}
return true;
}
CManager::CManager()
{
InitLogFile();
// dzlog_init(“test.conf”, “my_cat”);
m_zc = zlog_get_category(“my_cat”);
av_register_all();
avcodec_register_all();
InitVideoInput();
}
CManager::~CManager()
{
zlog_fini();
}
### 5、gbd调试
gdb a.out 调试允许程序
r 运行
b 可以接函数名或者cpp文件:行数 下断点
n 断点下一步
p 接变量名 可以查看变量的名称
wh 查看源码
bt 奔溃后查看堆栈调用
借鉴博客
https://blog.csdn.net/niyaozuozuihao/article/details/91802994
![img](https://img-blog.csdnimg.cn/img_convert/aace22632cca1d4fc929ead4bf2c8323.png)
![img](https://img-blog.csdnimg.cn/img_convert/8f85dc548d15625c09b75126c8be6ab6.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
tps://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**