![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
文章平均质量分 83
yygr
这个作者很懒,什么都没留下…
展开
-
【C/C++】size_t详解
使用size_t可能会提高代码的可移植性、有效性或者可读性,或许同时提高这三者。在标准C/C++的语法中,只有int、float、char、bool等基本的数据类型,至于 size_t 或 size_type 都是以后的编程人员为了方便记忆所定义的一些便于理解的由基本数据类型的变体类型。转载 2024-01-03 14:04:48 · 870 阅读 · 0 评论 -
linux gcc 链接静态库的几种方式
开发一个应用程序不可避免要使用多个第三方库(library).默认情况下,gcc采用动态连接的方式连接第三方库,比如指定-lpng,连接程序就会去找libpng.so。gcc提供了一个-static参数,可以改变gcc默认的连接方式,GNU官网上关于gcc连接选项的手册《3.14 Options for Linking》中有说明:如下这个-static选项是个大杀器,指定了这个选项,gcc在连接时对项目所有的依赖库都尝试去搜索名为的静态库文件,完成静态连接,如果找不到就报错了。转载 2023-09-11 15:18:41 · 879 阅读 · 0 评论 -
C++标准cout输出精度解析
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024,并且指数位是按补码的形式来划分的。转载 2023-08-05 07:39:12 · 4584 阅读 · 0 评论 -
gcc链接库报错“undefined reference to XXX“问题分析及解决方法总结
1.1 缺源文件。下面显示的是首先直接用g++编译main.cpp,出现了"undefined reference to foo()"的问题,未能编译出可执行程序a.out;然后在编译命令行加上foo.cpp(foo函数的定义文件)后,成功编译出a.out,而且执行起来更是非常顺滑~1.2 缺目标文件。同样,首先把foo.cpp编译成目标文件foo.o之后,也可以用foo.o来编译,也可以解决"undefined reference to XXX"的问题:1.3 缺库文件。转载 2023-07-07 09:50:19 · 11724 阅读 · 0 评论 -
GCC : 什么是编译?什么是静态库?什么是动态库?怎么生成?优先级?
gcc最初是 "GNU C Compiler" 的简称,只是当作一个C 语言的编译器,现在已经变成了 "GNU CompilerCollection",可以编译多种语言。转载 2023-07-07 09:45:17 · 243 阅读 · 0 评论 -
C++的.和->的区别
2、A->B则A为指针,->是成员B提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;"."左边只能是实体对象,左边为结构对象时用".";左边为指针对象时,使用->。.(点)运算符和 ->(箭头)运算符用于引用类、结构和共用体的成员。1、A.B则A为对象或者结构体;转载 2023-06-26 17:54:17 · 222 阅读 · 0 评论 -
#include < > 和 #include “ “ 的区别
注意:虽然#include " " 查找更广,但不能把它当做万金油,因为#include " " 查找顺序存在先后关系,如果项目当前目录或引用目录下存在与系统目录重名的头文件,就不会再去继续查找,存在头文件覆盖问题。另外,对于系统头文件,用#include包含,查找时一步到位,编译时效率更高。如果项目配置的头文件引用目录中仍然查找失败,再从系统类库目录里查找头文件,因此,对于系统库头文件,#include 和 #include " " 的作用一样,都能查找成功。转载 2023-06-07 16:02:35 · 920 阅读 · 0 评论 -
C++中的Lambda表达式详解
对于Lambda的使用,说实话,我没有什么多说的,个人理解,在没有Lambda之前的C++ , 我们也是那样好好的使用,并没有对缺少Lambda的C++有什么抱怨,而现在有了Lambda表达式,只是更多的方便了我们去写代码。不知道大家是否记得C++ STL库中的仿函数对象,仿函数想对于普通函数来说,仿函数可以拥有初始化状态,而这些初始化状态是在声明仿函数对象时,通过参数指定的,一般都是保存在仿函数对象的私有变量中;相反的,如果需要捕捉的值成成为Lambda函数运行时的变量,则应该采用按引用方式进行捕捉。转载 2023-05-31 10:11:58 · 132 阅读 · 0 评论 -
gcc编译参数-Wl和rpath的理解
注:我自己的一般方法是在可执行文件位于构建树中,并依赖于构建树中的其他库时,将其与–rpath选项链接,以便于调试,但在安装(make install,building packages)时,需要在不使用–rpath选项的情况下重新链接,并将查找共享库的任务留给目标平台的适当。,例如你显示指定的需要 FOO.so,但是 FOO.so 本身是需要 BAR.so 的,后者你并没有指定,而是 FOO.so 引用到它,这个时候,会先从 -rpath-link 给的路径里找。指定了运行时的so搜索路径。转载 2023-05-18 09:26:15 · 1333 阅读 · 0 评论 -
了解automake和autoconf(autoreconf)[通俗易懂]
所必须的软件:autoconf/automake/m4/perl/libtool(其中libtool非必须)。autoconf是一个用于生成可以自动地配置软件源码包,用以适应多种UNIX类系统的shell脚本工具,其中autoconf需要用到 m4,便于生成脚本。automake是一个从Makefile.am文件自动生成Makefile.in的工具。为了生成Makefile.in,automake还需用到perl,由于automake创建的发布完全遵循GNU标准,所以在创建中不需要perl。转载 2023-05-11 12:32:25 · 2826 阅读 · 0 评论 -
Boost的安装与使用
不止用在new/delete,也用在fopen()/fclose(),dlopen()/dlclose()等。可以把任意类型的数据放在any中,用的时候再any_cast出类型。实现,不需要编译成二进制文件。变量离开(正常/异常)作用域,再触发处理代码。把参数中的一个函数参数固定,其他的再赋值。大部分boost库的头文件主要由模板和。==字符串转换为类的类型 ==用boost库可以让类不可复制。:容器销毁自动释放指针。字符串转整型或浮点型。与析构函数相似的作用。转载 2023-05-10 15:02:53 · 918 阅读 · 0 评论 -
头文件与库文件的区别
例如abc.cpp 源文件中实现了abc()函数,我们假设abc()函数是包含重要算法的函数,我们需要将abc()函数提供给客户使用,但是不希望客户看到算法源代码。为了达到这一目的,我们可以将abc.cpp编译程库文件,库文件是二进制的,在库文件中是看不到原始的源代码的。使用时应包括stdio.h,打开stdio.h你只能看到,printf这个函数的申明,却看不到printf具体是怎么实现的,而函数的实现在相应的C库中。从编程的角度讲,通常有静态库文件和动态库文件。——————-转载分界线——————–转载 2023-05-10 14:56:57 · 440 阅读 · 0 评论 -
【C语言】调试工具GDB简述
b 19是breakpoint 19的简写(breakpoint的参数也可以以是某个函数名,表示在此函数处设置一个断点),表示在程序第19行设置一个断点。c是continue的缩写,表示继续运行程序,程序会在设置断点处停下来。每个断点都有一个编号(有的断点行数不一样,但地址却一样,有的地方不能够设置断点或者说与上一个设置的断点等效),可以用编号指定删除某个断点。gdb提供一个类似Shell的命令行环境,上面的(gdb)就是提示符,在提示符后面输入gdb的相应命令就可以实现其对应的功能。转载 2023-05-10 14:20:48 · 234 阅读 · 0 评论 -
C++ Lambda表达式(匿名函数): [](){}
Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.在Lambda表达式中,如果以传值方式捕获外部变量,则函数体中不能修改该外部变量,否则会引发编译错误。什么也不返回的Lambda函数可以省略返回类型, 而不需要使用 -> void 形式.匿名函数(英文名:lambda)就是没有名字的函数。eg.2. 自定义sort()排序规则。,它没有参数也没有返回值。参数列表中不能有默认参数。转载 2023-05-04 14:37:55 · 370 阅读 · 0 评论 -
linux glibc不兼容问题解决
CentOS 6 自带的 glibc 还是很老的 2.12 版本,而下载的第三方程序依赖 glibc 2.17 版本,这种情况要么自己重新编译程序,要么只能升级系统的 glibc 版本。由于我使用的程序是第三方编写并且是闭源软件无法自己编译,升级 glibc 固然可能能解决问题,但是 glibc 做为最核心的基础库,在生产环境上直接升级毕竟动作还是太大,因此希望还是能有更好的解决途径。看过这里就基本明白了,第三方程序的开发者是在自带新版本 glibc 的 Linux 系统上编译的,转载 2023-04-28 14:43:03 · 3500 阅读 · 0 评论 -
c语言中#define的使用
在很多C程序中,我们会在一个源文件的开头看到#define的字眼,和define的英文解释相同——可以理解为给xxx下定义,这里可以是标识符甚至是一个函数,接下来的内容将会对#define进行详解使用#define可以用来定义标识符,所谓标识符可以简单理解为一个能够表示一定内容的符号,其格式为#定义 标识符 内容简单介绍几个例子#define MAX 100 // 将 MAX 这个标识符和 100 这个数字关联起来。转载 2023-04-27 12:10:52 · 1274 阅读 · 0 评论 -
c++命名空间用法总结
我们假设这两个命名空间分别为first和second,我们在这两个命名空间里定义两个变量,变量名都是var,写一个程序。我们通常坚持使用显式的限定,并且仅将using指令局限在很小的作用域中,这样他们的效用就会受到限制并且易于使用。导入的整个的first的namespace,前一对x,y的值就是first中的x,y的值。因为cout是包括在命名空间std里的,这个符号你可以理解为“的”,比如std的cout。可以看到两个不同的namespace都被限制在了不同作用域中了,他们之间就没有冲突。转载 2023-04-27 10:43:32 · 69 阅读 · 0 评论 -
linux系统gcc降版本,并更改默认版本
因为只设置了一个,所以显示结果为:"链接组 gcc (提供 /usr/bin/gcc)中只有一个候选项:/usr/bin/gcc-4.8无需配置.",如果有多个则会显示一个按优先级的列表.最后的数字为优先级(越大越高),因为只有一个8版本作为alternatives,可以不要纠结数字,这样设就行了。设置前可以先输入命令ls /usr/bin/gcc* 查看gcc 8版本是否安装成功。(4)最后再次输入命令gcc -v查看gcc的版本已经变成了8.4了,成功了。(2)设置gcc的默认版本。转载 2023-04-26 22:27:23 · 1045 阅读 · 0 评论 -
高版本Ubuntu(如22.02)修改apt源,快速安装低版本gcc/g++
的gcc和g++版本不同,如Ubuntu22.04默认安装gcc/g++为11版本,高版本Ubuntu无法直接通过apt install gcc安装低版本编译器,可以通过离线安装(过于繁琐),本文推荐修改apt源,添加对应低版本ubuntu源即可,这里以Ubuntu22.04为例,给出安装gcc-5/gcc-7的简单方法,同时给出了常用的国内镜像源。2. Ubuntu22.04默认安装gcc-11版本,如果需要安装低版本,可以修改apt源,添加低版本ubuntu源来安装。使用下面命令修改apt源。转载 2023-04-26 22:23:49 · 3648 阅读 · 0 评论 -
GCC之g++详解
最初的GNU C编译器(GCC)是由GNU项目的创始人Richard Stallman开发的。Richard Stallman于1984年创建了GNU项目,以创建一个完整的类Unix操作系统作为自由软件,以促进计算机用户和程序员之间的自由和合作。转载 2023-04-24 10:20:44 · 354 阅读 · 0 评论 -
find_package查找boost库时的配置参数说明
Boost_USE_STATIC_LIBS:打开时,使用静态 Boost 库;Boost::headers 的别名 Boost::boost 是。# Boost_USE_MULTITHREADED:关闭时,使用单线程库。# Boost_USE_STATIC_RUNTIME:打开时,使用链接到。# Boost_USE_RELEASE_LIBS:关闭时,禁用发布库。# Boost_USE_DEBUG_RUNTIME:打开时,使用链接到。# Boost_USE_DEBUG_LIBS:关闭时,禁用调试库。原创 2023-04-23 16:51:27 · 802 阅读 · 0 评论 -
Boost库的编译
的编译Win7 sp1 64位旗舰版 + VS2008 sp1 + boost 1.633.1 解压boost_1_63_0.7z到C:\boost_1_63_0 (路径可任意选择,最好不要包含中文和空格);3.2 使用VC2008的命令行工具并cd到C:\boost_1_63_03.3 输入bootstrap.bat即可生成b2.exe和bjam.exe我这里是全编译:// 编译Debug版// 编译Release版// Debug版和Release版都编译。转载 2023-04-18 15:00:29 · 297 阅读 · 0 评论 -
boost库编译安装b2参数link 和 runtime-link,搭配shared 和 static
link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用 static方式。runtime-link:动态/静态链接C/C++运行时库。同样有shared和static两种方 式,这样runtime-link和link一共可以产生4种组合方式。虽然它和link属性没有直接关系,但我们习惯上,一个工程如果用动态链接那么所 有库都用动态链接,如果用静态链接那么所有库都用静态链接。转载 2023-04-18 14:52:12 · 1026 阅读 · 0 评论 -
Windows平台NASM汇编语言环境搭建
然后用gcc就可以制作exe文件。当然,制作exe还有很多种其他方式,这里选择gcc的优势是:当有dll时,我可以直接依赖dll,而不需要lib文件。就这一个优势,就秒杀了其它一众软件。在如下网址下载,当前的stable版本是2.15.05。把以上代码保存为demo.asm,然后在cmd下输入如下指令,输出了“Hello world!比如我把下载的文件解压缩到如下目录:D:\C\nasm-2.15.05-win32。下面记录NASM的环境搭建过程。这样nasm的环境就搭好了。以上就是nasm的编程环境。转载 2023-04-17 17:48:24 · 1035 阅读 · 1 评论 -
ubuntu 20.04安装(升级)cmake
访问源码包列表链接,可以选择我们指定的版本下载安装。通过源码安装,我们可以安装指定版本的。解压后,会在当前路径下生成一个。如果看到版本号,表示安装成功!如果输出如下,表示未安装。cmake源码包列表。转载 2023-04-14 14:31:11 · 1975 阅读 · 0 评论 -
Cmake中find_package()函数的使用
Config模式下的查找顺序,比Module模式下要多得多。根据cmake官方文档可以知道,find_package()有Module模式(基本用法,basic signature)和Config模式(full signature,完全用法),其中Module模式是基础,Config模式则更复杂高级些。前面提到说“如果Module模式查找失败则回退到Config模式进行查找”,但是假如设定了MODULE选项,那么就只在Module模式查找,如果Module模式下查找失败并不回落到Config模式查找。转载 2023-03-14 12:08:42 · 819 阅读 · 0 评论 -
CMake中的ARGC ARGV 和ARGN参数意义
编写或者查看一些开源cmake文件中经常遇到在宏(macro)和函数中经常会遇到ARGC ARGV 和ARGN等参数,该参数为cmake中专用变量,分别表示宏或者函数参数中的特殊意义。转载 2023-03-12 21:03:12 · 301 阅读 · 0 评论 -
Linux下autoreconf,configure,make使用
autoscan: 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。aclocal:根据已经安装的宏,用户定义宏和acinclude.m4文件中的宏将configure.ac文件所需要的宏集中定义到文件 aclocal.m4中。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”转载 2023-03-05 17:56:56 · 953 阅读 · 0 评论 -
CMake默认环境变量及选择编译器和设置编译器选项
但是这个命令是针对所有类型编译器的,也就是说这里添加的选项会在所有的编译器中运用,比如。在实际的项目平台中可能安装有多个版本的编译器,可以通过如下两种方式设置编译器的版本。这个变量只在当前文件有效,如果项目中有多个模块,多个编译文件,那么需在每一个。编译器的选项,对于其他编程语言,只要替换部分就可以,在当前。的内容,但是如果直接修改这个参数值,那么系统会忽略原。综上,对于一些在整个项目中通用的编译选项可以使用。编译器的参数选项,默认保存环境变量。语言编译器选项,对应于环境变量。的编译器参数,也会被运用在。转载 2023-03-04 12:36:09 · 14355 阅读 · 8 评论 -
cmake 常用变量和常用环境变量
主要有隐式定义和显式定义两种。隐式定义:比如PROJECT 指令,它会隐式的定义和两个变量。显式定义:使用SET 指令,就可以构建一个自定义变量了。转载 2023-03-04 12:10:46 · 492 阅读 · 0 评论 -
Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
centos7直接yum安装的那个gcc版本为4.8.5,对于大多数的需求来说都是低了。系统安装镜像里的那个版本也是4.8.5。现在最新的版本可能到9了,9.2 9.3的安装教程我在网上都搜到过,但是似乎9的版本都需要make和make install?编译时间得小半天吧,有时候还会有各种奇怪的报错。所以要求不是特别严格的话可以看看8.3.1版本,我不是很清楚它和这种费时巨大的在使用的时候会不会缺胳膊少腿的,但是我目前用着还行。转载 2023-02-27 23:03:16 · 1906 阅读 · 0 评论 -
安装新版GCC,CMAKE
直接在linux中下载对应版本GCC,命令为:wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz。③.查看6.0.26它的信息,命令为:$ strings /usr/local/lib64/libstdc++.so.6.0.26 | grep GLIBCXX。直接在linux中下载对应版本Cmake,命令为:wget -c https://cmake.org/download/cmake-3.25.1.tar.gz。转载 2023-02-27 11:23:18 · 1557 阅读 · 1 评论 -
cmake超详细入门教程
我们在平时编译代码的时,面对简单的代码,直接GCC编译就好,稍微多一点,可以编写Makefile来编译,以上编译起来都很轻松,可是平时工作的时候基本都是大工程呀,代码文件少则几十个文件了,这种情况下就头疼了,咋办呢?今天我来教你使用cmake轻松解决问题~提示:以下是本篇文章正文内容,下面案例可供参考关于cmake的使用方法还有很多,这里只是做了一个最基本的介绍,后期有机会在进行详细补充~转载 2023-02-25 15:03:12 · 5138 阅读 · 0 评论 -
No CMAKE_C_COMPILER could be found 几种原因及解决办法
起初我安装了Windows 8.1 SDK以及Windows 10.0 SDK,之后选择卸载Window 8.1 SDK,再次进行Configure和Generate,成功。该方法我没有验证,因为我没有遇到这样的问题,具体解决见:https://www.zhihu.com/question/53353841。没有编译器自然无法找到编译器,解决方案是:打开 Visual Studio Installer->修改->单个组件,勾选Window 8.1 SDK(或者 Window 10 SDK)。转载 2023-02-22 18:23:23 · 5082 阅读 · 0 评论 -
Windows上使用cmake编译和生成执行文件
说明: "Unix Makefiles"代表在build目录生成makefiles文件,..代表cmake的目录是build之外的项目根路径,如果是直接cmake..就是在build目录生成VS的工程文件。原创 2023-02-22 18:08:15 · 1991 阅读 · 0 评论 -
Windows下的cmake安装与使用
Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。我这里下载的是cmake-3.20.2-windows-x86_64.zip, 该压缩包对应的是windows 64位系统的cmake压缩包。我的电脑上路径是D:\cmake\cmake-3.20.2-windows-x86_64\bin,将该路径添加到环境变量中。他能够输出各种各样的。转载 2023-02-22 16:40:24 · 2960 阅读 · 0 评论 -
MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本
而且,给一个程序开发图形用户界面,是一件非常麻烦的事情,因为它是与平台紧密相关的,你要考虑各个平台的不同。如果代码没有明显的编译错误,运行时也没有逻辑错误,则在最终编译为可发布版的程序时,我们还要考虑编译优化的问题,以便生成的程序文件拥有更小的体积,和更高的运行效率。说明:bin 文件夹下包含了很多后缀名是 .exe 的可执行程序,这些就是开发时所需的工具,如:gcc.exe 是用来编译 C程序的,g++.exe 是用来编译 C++ 程序的,而 gdb.exe 则是用来调试程序的 debug 工具。转载 2023-02-22 15:06:38 · 11001 阅读 · 9 评论 -
windows cmake 简单使用教程
注意:CMake 支持大写、小写和大小写混合命令。Windows使用CMAKE需要指定编译器我使用的是MinGW的GCC和G++则在CMakeLists.txt中加入下列两条指令指定编译器使用cmake生成Makefile文件时需要加入参数 -G “MinGW Makefiles”能使用上了,就可以直接看cmake官方手册进行学习。转载 2023-02-22 12:20:38 · 1394 阅读 · 0 评论 -
gcc 命令详解及最佳实践
GCC(英文全拼:GNUCompilerCollection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。GCC 原名为 GNU C语言编译器,因为它原本只能处理 C 语言,但如今的 GCC 不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。转载 2023-01-31 13:15:34 · 791 阅读 · 1 评论