栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Primer Plus学习(二)—— 基本编程技能

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Primer Plus学习(二)—— 基本编程技能

基本编程技能

GDB及代码调试交叉编译和部署编译原理库的使用内存空间管理


GDB及代码调试

GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序;
2. 可让被调试的程序在你指定的断点处停住(断点可以是条件表达式);
3. 当程序被停住时,可以检查此时你的程序中所发生的事;
4. 你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

交叉编译和部署
    sudo apt install g++-arm-linux-gnueabi编译命令

    g++ main.cpp -o main_x86- 只可在x86主机上运行, 查看详情: file main_x86arm-linux-gnueabi-g++ main.cpp -o main_arm- 只可在arm架构主机上运行 大工程做交叉编译的时候,调用的库也需要是交叉编译出来的库如编译ARM架构的板子,需要在CmakeList上指定编译的平台如X86或arm

编译原理

    编译时,预处理过程直接将头文件copy一份过来,其实相当于上面已经把头文件里的声明都拿过来了;每个源文件先单独编译成目标文件,头文件只是把各个实现的声明提取出来,支持调用的实现来进行编译和链接;h文件和cpp文件的名字可以不一样,但是具体函数的名字需要保持一致。

    g++ main.cpp -c只编译当前文件,不链接,将所有的cpp编译成目标文件.o

    g++ main.o mymath.o -o cpp_demo将目标文件进行链接,生成可执行文件

    可以直接编译 g++ *.cpp -o cpp_demo(不会再生成.o文件)

库的使用
    宏定义, 防止重复包含头文件
    1. #ifndef _MYMATH_H_
    2. #define _MYMATH_H_
    3. #endif
    
    生成静态库
      g++ -c my_math.cpp 生成my_math.oar -rcv libmymath.a my_math.o 将my_math.o创建为静态库文件libmymath.a
    使用静态库
      g++ user_use_my_math.cpp -L. -lmymath -o user_test生成可执行文件之后,即可删除静态库
    生成动态库(共享库)
      g++ -shared -fPIC my_math.cpp -o libmymath.so 生成libmymath.so
    使用动态库
      g++ user_use_my_math.cpp -L. -lmymath -o user_test 与使用静态库的方法一样
      注意: 文件夹下同时存在相同名称的.so 和 .a, 优先链接.soldd user_test 查看依赖的动态库直接运行user_test失败,因为默认在 /lib , usr/local/lib, user/lib下查找
        解决方法: export LD_LIBRARY_PATH=. 修改当前终端的环境变量软连接: ln -s libmymath.so.3.2 libmymath.so 将对于libmymath.so的依赖链接为libmymath.so.3.2(3.2版本的动态库)
内存空间管理
    全局变量和静态变量在静态存储区域,自动初始化为0;普通局部变量存储在栈区,不会自动初始化堆区空间自己管理new和malloc / delete和free
      new是关键字,malloc是函数;关键字效率相对高一些;给对象申请内存时,new会调用构造函数,而malloc只申请空间,不会调用构造函数;释放对象内存时,delete会先调用析构函数,而free直接释放内存空间。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号