- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
模块化编程就是我们一个复杂的项目分成很多模块,比如一个单片机项目,就可能分为:主函数模块,液晶显示和数码管显示模块,时间延时模块,温度传感器模块等。而一个程序工程包含多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一个模块,每一个模块都有其各自的功能,而每一个.h文件则是声明该模块,相当于功能说明书 模块化编程在嵌入式中是必须要掌握的技能。
开发C程序时,当代码量较大功能较复杂时,单一文件程序会使得文件非常巨大,代码量非常大,成千上万行的代码在一个文件中不便于修改和维护,因此需要将不同的功能模块放在不同的文件中。
并且在团队合作开发的时候,需要模块化开发。每个人负责一部分功能的开发,而你所负责的模块,你需要将你负责的模块功能写好,封装好,之后形成一个.c与.h ,然后交付给项目组长,组长则负责整体框架(main)的编写与各个模块的组合调试,最后各个模块的组合,形成了整个工程。由此可见,模块化可以有效的提高团队开发的分工协作效率。对于整个项目开发有着很大的好处
注意事项:
.h
头文件格式一定要按照下面这格式进行#ifndef DEMO1_CALCULATE_H // 避免多个文件重复导入
#define DEMO1_CALCULATE_H // 定义一个预处理宏定义
//extern 声明代码
#endif //DEMO1_CALCULATE_H 表示条件命令的结束
<>
而是使用" "
因为<>
方式只会到系统的专门目录找,而这里没有我们定义的模块 ,而" "
方式编译器会先到当前的工程项目所在目录下找,找不到再到系统专门目录下找x.c和x.h
要在同一个目录下不然引入x.h的时候找不到.c源码.h文件
不能定义具体实现 ,只能进行声明, 而具体实现都需要在.c文件
中定义.h
头文件里,而想让外部调用的函数或变量,则一定要在头文件中声明.c文件头
以static关键字声明, 这样这些函数和变量只会在当前.c文件中起到作用,一来可以避免函数名的重复;二来可以保护内部的实现数据,防止被破坏 ,比如: static void lEDOpen();
然后我们在需要调用的地方,将头文件导进来就行了,之后就能使用头文件中声明的内容了
在上面的案例中我们只是在main.c文件中应用了模块,那么模块和模块之间能相互引用吗? 答案是可以的,直接导入就行了
静态库,顾名思义,它是静态的,也就是说它不会被动态编译,它只会静态编译,节省了编译时间,提高了编译速度。同一份静态库,可以被多个程序进行编译,也就实现了代码的复用共享。
静态库的后缀一般有2种.a
(linux) , .lib
(windows) ,但是在windows下MinGW编译的静态库也是.a
的所以如果使用MinGw进行编译代码的话.a
文件能通用的
静态库命名规则: 这类库的名字一般是libxxx.a;或者 libxxx.lib; 而xxx是库的名称
动态库,就是程序应用启动的时候,动态加载的,因为它一般是在系统运行的时候就已经运行的动态库,因此其它应用可以直接使用它,并且同一个动态库可以被多个应用共享使用,在系统中对于一个动态库只会存在一份,这大大节省了内存空间,大大提升了系统的性能。
动态库的后缀一般也是2种 展名分别为:.so
( linux )或者 .dll
(windows)
动态库命名规则: 这类库的名字一般是libxxx.so 或者libxxx.dll 而xxx是库的名称
C语言-Cmake-CMakeLists.txt教程 可以参考这篇文章
先写好c代码,在demo中调试没问题了,那么我们就可以将相关的代码copy到静态库中进行打包了,下面就创建一个静态库
然后随便创建几个.c和.h文件 如下:
然后可以参考C语言-Cmake-CMakeLists.txt教程 ->打包静态或动态库CMakeLists.txt(通用)
这篇文章进行配置CMakeLists.txt ,之后打包效果如下:
注意: 打包后会自动在项目名称前加lib ,所以在创建的时候无效前缀加lib
然后我们将打包好的libtool.a
和头文件目录tool
都拷贝到需要的地方,然后可以参考C语言-Cmake-CMakeLists.txt教程-> 项目编译CMakeLists.txt(静态动态库通用)
这篇文章, 进行配置CMakeLists.txt, 项目编译之后在调用的地方使用#include "头文件"
就行
如果发现编译错误那么,记得刷新Clion-CMake的缓存
先写好c代码,在demo中调试没问题了,那么我们就可以将相关的代码copy到动态库中进行打包了,下面就创建一个动态库
然后随便创建几个.c和.h文件 如下:
然后可以参考C语言-Cmake-CMakeLists.txt教程 ->打包静态或动态库CMakeLists.txt(通用)
这篇文章进行配置CMakeLists.txt ,之后打包效果如下:
使用MinGW动态打包后就会出现两个文件.dll
和.dll.a
我们只需要.dll
就行,然后我们将打包好的libtool1.dll
和头文件目录tool1
都拷贝到需要的地方,然后可以参考C语言-Cmake-CMakeLists.txt教程-> 项目编译CMakeLists.txt(静态动态库通用)
这篇文章, 进行配置CMakeLists.txt, 项目编译之后在调用的地方使用#include "头文件"
就行
上面可以看出来运行报错了,这是因为默认exe程序会去当前目录下找dll文件如果没有找到那么就会去环境变量里找,都没有找到那么就报错了具体解决办法,可以参考这篇文章C语言-Cmake-CMakeLists.txt教程动态库导入无效,报错问题
可以参考这篇文章C语言-Cmake-CMakeLists.txt教程打包静态或动态库CMakeLists.txt(通用)
查看动态库定义的函数或变量 readelf -c xxx.a
查看动态库定义的函数或变量 readelf -A xxx.so
查看库里所有文件列表: ar -t xxx.a
查找静态库里指定的函数或变量 nm -o xxx.a | grep "yyy"
查找动态库里指定的函数或变量 nm -o xxx.so | grep "yyy"
nm 常见的符号类型:
A 该符号的值在今后的链接中将不再改变;
B 该符号放在BSS段中,通常是那些未初始化的全局变量;
D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
T 该符号放在代码段中,通常是那些全局非静态函数;
U 该符号未定义过,需要自其他对象文件中链接进来;
W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。
常用的工具类我们可以使用静态库, 频繁升级的部分我们可以使用动态库
注意: 动态库代码和项目代码是分离的,如果更新的版本与原来的版本不兼容的话,使用动态库的新版本加载后有可能会出问题导致项目崩溃等情况。
主要还是看项目升级频繁吗?
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复感谢,配合,希望我的努力对你有帮助^_^
免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我。
如何在 Mac 上的 Clion EAP 中更改默认工作目录? 每次创建新项目时,我都需要将其更改为项目位置。 最佳答案 首先,无法通过 CLion 的 GUI 更改工作目录(请参阅 Source 中
我想知道 CLion IDE 是用什么语言编写的,以及使用什么库来制作图形。 最佳答案 See this wiki post. 用Java编写 关于clion - CLion 是用什么语言和图形库制作
我已按照说明更新我的 GDB 以便与 Eigen3 一起使用。但是,CLion IDE 无法在调试面板中加载特征矩阵的内容。 本应是快速验证和调试结果的过程变成了耗时的手动打印过程(或更糟:在 cyg
我正在尝试使用 Clion 编写一个 C++ 应用程序,该应用程序使用使用 ASCII 序列的彩色控制台输出。当我在 Clion 中运行程序时,没有显示颜色。但是当我在终端中运行程序时,我可以看到颜色
使用CLion时,我发现输出有时会中断。 例如,在运行代码时: main.cpp #include int main() { int i; for (i = 0; i < 1000;
我正在寻找一种在 CLion IDE 中并行处理多个项目的方法。 现在我一次只能处理一个窗口中的每个项目,但我正在寻找类似于 Eclipse IDE(见下文)的解决方案 - 能够在侧栏上看到我不同项目
嗨,我在更改函数颜色的颜色时遇到问题。我正在使用 Material 主题,除了函数调用之外,我更改了几乎所有颜色。任何人都遇到过这个问题并知道如何解决它?它是否列在另一个标题下?我目前将它用于 C/C
大多数从可以选择构建单个文件的其他 IDE 切换过来的人都对 CLion 感到有些困惑,而 CLion 恰好没有选项。 那么如何避免将每个源文件的每个名称都添加到 CMake 中呢? 最佳答案 您正在
在 CLion 中,如何指定 C++ 编译器将在其中查找头文件的包含目录?另外,如何设置要链接的库及其库目录? 目前我正在做那些直接修改文件的任务 CMakeLists.txt : include_d
在使用 CLion 时,我发现输出有时会中断。 例如运行代码时: main.cpp #include int main() { int i; for (i = 0; i < 1000
在查看 C 库函数或系统调用的文档时,Linux 上的 CLion 会显示相应的手册页。我在 Windows 本地和适用于 Linux 的 Windows 子系统中都安装了手册和手册页。有没有办法将
在 CLion 中创建文件时,以下标题位于文件顶部: // // Created by on 14.01.18. // 有人通过 can remove this header 去 Settings
我想要查看我的 C 程序的 ASM 有很多原因,但据我发现,似乎只能查看没有 src 的 3rd 方模块的 ASM。 如何查看我的 src 的 ASM? 最佳答案 我有同样的问题,但找到了 clion
我很难让 Ctrl+V 在 CLion 中粘贴代码(我使用的是 Windows 1.1.1 版)。当我尝试粘贴使用 Ctrl+C 复制的代码时,例如网站或其他程序,它似乎只是偶尔工作。通常它会粘贴一段
CLion 有一个很好的 integration of Clang-Tidy ,但默认配置是针对现代 C++ 的。然而,我坚持使用的编译器仅为 C++03,而且 Clang-Tidy 关于使我的代码现
我正在尝试在我的 Windows 机器中将 valgrind 与 clion 结合使用。我已经完成了 setting up WSL 的步骤和 valgrind在 window 上。虽然当我尝试在我的“
使用上下文菜单,我可以通过右键单击和 new > C++ Class 在 CLion 中轻松创建 .cpp 和头文件. 头文件的扩展名为.h。如何使 .hpp 成为默认的 header 扩展? 最佳答
编译前准备 我们正常直接编译后生成的exe是没有任何图标的 那么很多exe程序都是有个性图标的那么在vs和qt中是比较简单的可是在Clion编译中怎么才能添加呢? 前提条件,本机必须配置好MinGW,
虽然在我的编程“职业”中大部分时间都使用了 Java 和 PHP,但我现在正在尝试更深入地学习 C++。为此,我使用 CLion 作为我的 IDE - 主要是因为我非常熟悉 phpStorm 和 In
您好,我用 c 语言编程,我喜欢使用 clion。有没有办法更改它在新项目中创建的默认文件的方式?我希望它创建一个 main.c 和 make 文件来反射(reflect)这一点。 最佳答案 阅读Ho
我是一名优秀的程序员,十分优秀!