编译器
文章平均质量分 56
吃素的施子
这个作者很懒,什么都没留下…
展开
-
C++编译时报错 error: unknown type name ‘ ‘
今天项目中,遇到一个很奇怪的问题,明明导入了头文件,却一直说不知道该类型。如类VideoInfo 类存储的是视频 的信息参数,它当作参数,传入 解码器,作为解码器的成员变量,如下:#include <cstdint>#include "IDecode.h" extern "C"{#include "libavformat/avformat.h"#include "libavcodec/avcodec.h"}; class VideoInfo {public: .转载 2021-12-31 17:09:33 · 18661 阅读 · 0 评论 -
MacBook系统 pip安装时报错`error: Unsupported architecture`,`error: architecture not supported` 解决办法
新电脑pip安装老是报错,看报错信息好像是CPU架构不兼容,记录一下解决办法以下是报错信息:ERROR: Command errored out with exit status 1: command: /Users/xxiaowei/pyProject/DjangoBlog/venv/bin/python -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/_l/z原创 2021-12-09 16:25:39 · 4503 阅读 · 2 评论 -
CMake学习(二) —— 链接库的生成
除使用 add_executable 生成可执行文件外,还可以使用 add_library 生成链接库。一、Linux的链接库首先讲一下 linux 的链接库,就是一些函数代码的二进制形式,有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。静态链接库 .a:文件的命名方式:“libxxx.a”,库名前加“lib”,后缀是“.a”,库名是“xxx”。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。当要使用时,链接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这转载 2021-10-26 21:00:46 · 747 阅读 · 0 评论 -
CMake教学(一)—— 初探CMakeLists.txt
我们平时编译程序时,所使用的各种IDE已经帮你规划好编译流程,但这样编译可控性不好,有时不能按照自己的意愿编译,并且有些IDE不能跨平台,需要重新建工程,很不方便。而CMake可以解决以上问题,特别是在Linux上使用更加方便。接下来是CMake最简单的也是基本的使用流程:一、编写源文件// hello.c#include <stdio.h>int main(){ printf("hello CMake!\n"); return 0;}二、编写CMa转载 2021-10-26 20:53:45 · 590 阅读 · 0 评论 -
/usr/bin/ld: cannot find -lm 编译问题解决
在编译程序的时候出现编译错误!如下所示:/usr/bin/ld: cannot find -lmcannot find -lm问题根源在于:编译的时候用了“-static” 选项。那么为什么出现这个问题呢?因为现在的Linux中没有静态c库。解决办法:安装glibc-static 库就好了。我的主机环境是RHEL6.5,安装命令如下所示:yum install glibc-static安装完成后,然后编译程序就通过了。...原创 2021-10-22 16:46:48 · 2732 阅读 · 0 评论 -
linux中CMake版本升级
CMake版本升级1、在网址 https://cmake.org/files/v3.1/ 下载 cmake-3.1.2.tar.gz2、解压3、执行 ./configure4、执行 make5、执行 sudo make install6、执行 sudo update-alternatives --install/usr/bin/cmakecmake /usr/local/bin/cmake1--force7、运行 cmake --version 查看版本号注意: 第6步upd...原创 2021-10-22 10:26:55 · 1866 阅读 · 0 评论 -
Android工程怎样调用本地aar文件中的方法?
生成、导出aar 在项目中File-New-New Module-Android Library-Next,如下图 到此会在你的项目中,生成一个Library,如下图 在生成的Library的项目中开发,开完完成,运行assamble,生成aar,如下图 到此生成了aar包,导出即可 工程引用aar 把上一步导出的aar引入到需要引用的项目中,一般放在app/libs文件夹中,在app/build.gradle中配置参数,如下原创 2021-10-08 14:27:23 · 2829 阅读 · 0 评论 -
C++选择编译宏_MSC_VER
_MSC_VER是微软的预编译控制。_MSC_VER可以分解为:MS:Microsoft的简写。C:MSC就是Microsoft的C编译器。VER:Version的简写。_MSC_VER的意思就是:Microsoft的C编译器的版本。微软不同时期,编译器有不同的版本:MS VC++ 14.0 _MSC_VER = 1900 (Visual Studio 2015)MS VC++ 12.0 _MSC_VER = 1800 (VisualStudio 2013)MS VC++原创 2021-09-26 09:35:43 · 797 阅读 · 0 评论 -
Linux程序执行时报:“error while loading shared libraries: xxx.so” 错误解决方法
我们在Linux下执行某些程序的时候可能会提示找不到共享库的错误:"error while loading shared libraries: libprotobuf.so.9: cannot open shared object file: No such file or directory"原因一般有两个:一是:操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对,遇到这种情况那就去网上下载并安装上即可。二是:已经安装了该共享库,但执行需要调用该共享库的程序原创 2021-08-30 10:41:05 · 8625 阅读 · 0 评论 -
如何通过g++编译一个linux程序
项目结构和内容1. 项目结构2. 项目内容swap.h swap.cpp:包含swap.h main.cpp:包含swap.h 编译成可执行文件// 头文件路径包含./includeg++ main.cpp src/swap.cpp -Iinclude -o main生成静态库&链接生成可执行文件生成可执行文件// 进入src目录下cd src// 汇编,生成swap.o文件g++ swap.cpp -c -I../i原创 2021-08-27 17:57:04 · 439 阅读 · 0 评论 -
vs的dump文件调试,exe、dll和pdb匹配问题
一、pdb文件简介英文:Program Data Base,即程序的基本数据,是VS编译链接时生成的文件。 pdb文件主要存储了如下调试信息: (1)public, private,和static函数地址。 (2)全局变量的名称和地址。 (3)参数和局部变量的名称及它们在栈中的偏移量。 (4)类型定义,包括class, structure,和 data definitions。 (5)源文件名称和行号。二、exe、dll和pdb匹配问题1、调试时,系统会查找exe或者dll中指定位置的原创 2021-04-28 16:44:59 · 2050 阅读 · 0 评论 -
崩溃时产生的dump文件,VC++ 怎么定位问题并进行调试
一、什么是PDB文件 1. PDB文件是"程序数据库" Program Data Base的简称,包含的程序的代码信息 2.通过这个文件我们可以查看对应断电的位置,堆栈信息等内容 3.使用PDB使得我们无需代码也可以掌握程序的堆栈运行状态二、PDB文件 1.由链接器自动生成 2.文件由两部分构成,私有符号数据(private symbol data )和 公共符号表(public symbol data) ...原创 2021-04-28 15:31:17 · 1157 阅读 · 0 评论 -
VC6.0工程,打开或者添加文件崩溃的解决方法
在Win7操作系统下使用Visual C++ 6.0编程时,如果点击菜单中的【打开】或者【添加】,或者按快捷键,都会弹出下图的对话框,出现程序崩溃并退出的情况。出现这种问题的原因是VC6.0和其他软件冲突所致,网上一般认为是和Office2007或者Office2010冲突,有人说是和Office里的vosio冲突,但是经过检查发现卸载vosio之后问题依旧存在,也有人说是需要重装系统或者重新安装软件,但是这些方法均不可行。其实这是微软的一个bug,微软官方对于这个问题给出了官方的解决方案(原原创 2021-04-09 14:32:18 · 2690 阅读 · 2 评论 -
用make -j 加快编译速度
make -j在Linux编译程序的时候,IO往往不是瓶颈,那CPU就应该是一个影响编译速度的重要因素了。用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。还是用Kernel来测试:用make: 40分16秒用make -j4:23分16秒用make -j8:22分59秒由此看来,在多核CPU上,适当的进行并行编译还是可以明显提高编译速度的。但并行的任务原创 2021-04-01 11:06:02 · 640 阅读 · 2 评论 -
Linux查看动态库.so的依赖库
查看动态库依赖3种方法(1) $ ldd /bin/grep linux-gate.so.1 => (0xffffe000) libc.so.6 => /lib/libc.so.6 (0xb7eca000) /lib/ld-linux.so.2 (0xb801e000) (2) $ LD_TRACE_LOADED_OBJECTS=1 /bin/grep linux-gate.so.1 => (0xffffe000原创 2021-02-08 14:38:58 · 4852 阅读 · 0 评论 -
引用openssl静态库libcrypto.a和libssl.a出现undefined reference to XXXX错误
解决方案:=======================================================================================================gcc obj/Debug/main.o -L/usr/local/openssl/lib -lssl -lcrypto -ldl -lpthread -o main原因分析:在链接这个库的时候一定要注意2个问题:1.openssl库的版本问题,请直接链到你需要的openss原创 2021-02-08 14:32:22 · 959 阅读 · 0 评论 -
gcc编译:undefined reference to `func‘ 问题的几种情况
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13):undefinedreferenceto`func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o)测试代码如下: 然后编译。gcc-ctest.c gcc–...原创 2021-02-08 14:19:43 · 3606 阅读 · 0 评论 -
C++编码规范
一、基本准备工作1、设计工程目录结构(1)基本原则:【1】工程本身的文件、项目编译生成的中间文件放一个文件夹;【2】最终生成的目标文件单独放一个文件夹;【3】如果有工程依赖的库文件等单独放一个文件夹;【4】用户代码文件放单独一个文件夹,或者将头文件和源文件单独分开放置;【5】用户代码文件里面如果有比较重要的功能模块单独放一个文件夹,如陀螺仪,气压计,光感,音乐,灯效,图片,字库等。【6】重要的项目资料单独放一个文件夹保存,如硬件原理图,软件框架图,通信协议,复杂重要功能的说明转载 2021-01-11 10:12:35 · 1358 阅读 · 1 评论 -
面试常问的内存对齐,是什么意思?
1、什么是内存对齐?关于什么是内存对齐,我们先来看几个例子:typedef struct { int a; double b; short c;}A;typedef struct { int a; short b; double c;}B;分别对他们求大小,sizeof(A),sizeof(B)我们所得到的结果是不同的,sizeof(A)=24而sizeof(B)=16为什么会产生不一样的结果呢?这是非常简单的原创 2020-10-22 18:26:52 · 232 阅读 · 0 评论 -
c++多重定义:multiple definition of 问题解决
在编写代码时,我想让两个接口的函数从公用一个,现在分为两个来使用,但是函数的名字相同,放在两个不同的C文件中,编译后发现,在链接的时候,出现如下错误:multiple definition of `函数名'分析是因为两个函数重复定义了,我将每个函数分别加上static后,编译通过。于是上网看了下这个问题的其他现象及解决方法,参考别人,记录如下:首先,最关键的,不要把全局变量以及全局方法的定义放在头文件里!1.给每一个头文件加上条件编译:注:此方法不是解决上述问题的方法,只是解决mu原创 2020-09-04 12:05:19 · 30198 阅读 · 3 评论 -
学会用GDB调试C++程序
1 、GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时.原创 2020-07-02 22:57:24 · 749 阅读 · 0 评论 -
git fetch与git pull的区别
git fetch和git pull都可以将远端仓库更新至本地那么他们之间有何区别?想要弄清楚这个问题有有几个概念不得不提。FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。commit-id:在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能...转载 2019-09-19 17:10:51 · 153 阅读 · 0 评论 -
_MSC_VER 预编译控制
_MSC_VER是微软的预编译控制。_MSC_VER可以分解为:MS:Microsoft的简写。C:MSC就是Microsoft的C编译器。VER:Version的简写。_MSC_VER的意思就是:Microsoft的C编译器的版本。微软不同时期,编译器有不同的版本:MS VC++ 15.0 _MSC_VER = 1910 (Visual Studio 2017)M...原创 2019-08-07 14:24:49 · 219 阅读 · 0 评论