
工程构建
工程构建
SleepyPat
化整为零
有的放矢,心无旁骛
展开
-
[工程构建] 使用 pkg-config 的 cmake 模板
【代码】[工程构建] 使用 pkg-config 的 cmake 模板。原创 2024-10-12 16:30:26 · 305 阅读 · 0 评论 -
[工程构建] ubuntu里如何找到某个库使用的头文件和链接库
【代码】[工程构建] ubuntu里如何找到某个库使用的头文件和链接库。原创 2024-05-27 09:49:36 · 694 阅读 · 0 评论 -
[工程构建] 使用pkg-config协助工程搭建
上面提到的 --cflags 和 --libs 选项是如何获得结果中的信息呢?其实,pkg-config 工作的原理是每个库都要提供自己的 .pc文件,这个文件里描述了在使用这个库时需要用到的链接选项是什么,头文件路径又在哪里。比如。原创 2024-05-08 14:44:10 · 549 阅读 · 0 评论 -
[pkg-config] 第三方软件包/库管理工具 pkg-config
构建工程时,多会依赖于第三方库,这些库在安装到系统中后都会创建一个 .pc 后缀的说明文件,里面包含了库的基本信息,比如版本号,头文件安装路径,库文件安装路径等等。使用这个信息我们便可以准确地获取这个库的信息。pkg-config 也用在 rpm 打包中,我们可以在所有 rpm 源码路径中找到一个 .pc 结尾的文件,这里面描述了当前 rpm 包依赖的库,自己这个库的名字和版本,当使用rpm释放时会被安装到哪些目录等等。原创 2024-01-08 17:25:34 · 617 阅读 · 0 评论 -
[soong] Android源码构建工具 soong
https://android.googlesource.com/platform/build/soong/+/refs/heads/master/README.md原创 2023-12-21 11:48:50 · 528 阅读 · 0 评论 -
[工程构建] qmake中可使用的内置属性
qmake has a system for persistent configuration, which allows you to set a property in qmake once, and query it each time qmake is invoked. You can set a property in qmake as follows: qmake -set PROPERTY VALUEThe appropriate property and value shou原创 2021-04-22 16:00:18 · 355 阅读 · 0 评论 -
[工程构建] Windows环境下的软件包管理器-vcpkg
首页:https://github.com/microsoft/vcpkg原创 2020-06-22 17:27:51 · 217 阅读 · 0 评论 -
[工程构建][linux] 动态库 && 静态库
静态库:一般指ar crv xxx.a x1.o x2.o ... xn.o命令产生的.a文件,其实就是把多个.o文件打包成一个.a文件的过程,主要为了“方便调用” 当然,也可以不打包,那么在使用的时候相对麻烦点: gcc 1.c x1.o x2.o ... xn.o -o 1 VS.ar crv xxx.a x1.o x2.o ... xn.ogcc xxx.a 1.c -o 1生成与使用:1) 准备 : 首先把想要打包的文件编译成.o , gcc ...原创 2020-05-26 09:09:26 · 194 阅读 · 0 评论 -
[Qt] qmldir文件说明
前沿:制作Qt插件时会用到qmldir文件,此文件用来描述插件的相关信息,当我们在qml中使用import语句时入股采用 uri 方式导入模块,则需要模块路径下有对应qmldir文件。(另一种import方式为路径导入)回忆:插件分为两种,一种是c++生成的dll文件,一种是qml文件,这两种插件都需要qmldir来描述,以便import的动作能够正确工作。module 是指包含 dll lib qml qmldir ... 文件的 “文件夹” , 插件也是一种模块,因此也需要具备qmldir文原创 2020-07-10 14:59:26 · 3158 阅读 · 0 评论 -
[工程构建] 动态库中的静态变量和全局变量在工程中的可见性(windows和linux有别)
ODR (One Definition Rule) :在“链接”的时候,全局变量在符号表中的符号必须唯一。静态全局变量和函数不能被模块外部访问(这里的模块是指 动态库和可执行文件),这就意味着如果某个第三方库的某个文件中定义了一个静态全局变量,那么无论如何调用这个库的程序都看不到这个变量。注意这里是 静态“全局”变量/函数。在名称空间内的静态成员可以通过名称空间来访问。当使用extern来引入其他编译单元的符号时,Windows和Unix-like 的差别就出现了。==========.原创 2020-07-16 14:48:27 · 969 阅读 · 0 评论 -
[工程构建] relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;
参考:学习笔记:relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;_fanchenxinok的专栏-优快云博客描述:在构建工程时会遇到relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object;如果某个动态库依赖于其它静态库,则要求静态库在编译时指定.原创 2021-09-30 17:49:23 · 1339 阅读 · 0 评论 -
[工程构建]使用MinGW构建windows动态库时生成.lib文件
if (WIN32) set (CMAKE_GNUtoMS ON)endif (WIN32)原创 2021-10-27 11:42:31 · 1066 阅读 · 1 评论 -
[工程构建][gcc] Linux环境下c程序和c++程序的编译对比
g++与gcc的区别1. 后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序。注意,虽然c++是c的超集,但是两者对语法的要求是有区别的,C++的语法规则更加严谨一些。2. 编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通常用g++来完成链接,为了统一起见,干脆编译/链接...原创 2018-04-27 09:35:39 · 317 阅读 · 0 评论 -
[工程构建] aclocal-1.14: 未找到命令
make 和 make install 的时候会遇到aclocal-1.14: 未找到命令 ,此时只需要运行下面的命令即可:autoreconf -ivf原创 2021-09-30 17:41:08 · 1298 阅读 · 0 评论 -
[工程构建] windows环境下编译vlc源码
前言:最近需要对 vlc 源代码进行编译,官方提供了三种方式:1)使用MinGW在linux环境下进行交叉编译,在ubuntu环境下使用交叉编译工具链编译,生成能够在windows平台下运行的二进制文件,即MinGW+linux;2)使用windows平台下的小型unix环境工具组——“MSYS”,再进入MSYS使用1)中的交叉编译,即MSYS+MinGW+Windows;3)使用Cygwin,在windows平台下,直接编译生成可在windows下运行的代码,Cygwin是windows.原创 2020-06-16 14:28:20 · 1721 阅读 · 0 评论 -
[工程构建] cmake创建Release和Debug工程
Debugcmake -DCMAKE_BUILD_TYPE=Debug ./Releasecmake -DCMAKE_BUILD_TYPE=Release ./原创 2022-01-04 18:22:04 · 421 阅读 · 0 评论 -
[c++][工程构建] c 和 c++ 关于编译和链接的一些说明
前言:从源代码到目标二进制文件,中间经历很多过程,其中之一就是编译,如果我们将 “ 汇编 + 编译 ” 看做一个整体,那么编译可以认为是从 源代码 到 二进制码的一个转变,这个实体的变动有很多附加动作,其中之一就是符号表的生成,这也是非常重要的一环,软件调试正是依赖于符号表来重现函数调用栈的。编译的兼容性:C++标准允许每个编译器设计人员自定义名称符号表(symbol table)中条目的格式,因此由不同编译器对相同源文件实施编译的最终结果可能是不一样的,因为符号表的格式不通,比如fun..原创 2020-06-02 10:06:27 · 325 阅读 · 0 评论 -
[工程构建] 常用第三方库选型
前言:日常开发搭建工程会用到很多第三方库,这里整理一些用起来比较顺手的库,也方便以后搭建新工程时能够快速选型,以及快速找到切实可用的源码和二进制文件。原创 2020-05-25 09:00:23 · 206 阅读 · 0 评论 -
[工程构建] qmake的一些用法
$$() : 在qmake解析pro文件时,用来获取变量的值$() : 在makefile运行时,用来获取变量的值原创 2021-04-22 16:02:40 · 487 阅读 · 0 评论 -
[工程构建] 由dll生成lib文件
参考:https://blog.youkuaiyun.com/sdhongjun/article/details/80111451https://www.cnblogs.com/tibetanmastiff/p/7053482.htmlhttps://bbs.youkuaiyun.com/topics/390337790?list=1851666https://blog.youkuaiyun.com/langal1212/article/details/77717450原创 2020-07-02 08:45:52 · 317 阅读 · 0 评论 -
[工程构建] gcc及编译相关知识点(管理动态库搜索路径)
命令格式:命令格式:gcc [-c|-S|-E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn...] [-Wpedantic] [-Idir...] [-Ldir...] [-Dmacro[=defn]...] [-Umacro] [-foption...] [-mmachine-option...] [-o outfile...原创 2020-05-26 11:20:35 · 340 阅读 · 0 评论 -
[工程构建][gcc] -E和-i一块使用,-o和-L、-l一块使用
预编译的时候用处理头文件,因此gcc -E的时候需要通过-I来指定头文件查找路径链接的时候需要各个库,因此gcc -o的时候需要通过-L或者-l来指定库文件查找路径(注:要区分开,因为我们在编译的时候的时候都是一条gcc搞定,这个细节要注意)...原创 2020-06-02 10:29:33 · 1693 阅读 · 0 评论 -
[工程构建] Windows的运行时库 Redistributable
前言:我们在运行有msvc编译的c++程序时,都需要依赖运行时库,这些库微软已经通过exe压缩包的形式为我们提供了,而且是跟着vs版本走的,我们可以在vs的安装路径下找到这些exe,直接运行后便可以为当前计算机安装对应版本的运行时库了。很多在开发环境上编译好的程序丢到目标机器上运行时出现异常都是由于缺少运行时库导致的。下载和简介:如下链接就是vs2015的运行时库下载地址 :https://www.microsoft.com/en-us/download/details.aspx?id=1.原创 2020-06-18 16:46:11 · 2181 阅读 · 0 评论 -
[工程构建] mutiple definition of 问题
描述:mutiple definition of,顾名思义,是遇到了符号重复定义的问题,这个问题会在链接阶段出现:如果符号是 变量,则会导致链接失败; 如果符号是函数,则在Windows下会warning提示然后使用第一个出现的符号,如果是在Linux下,会链接失败。快速排查:确定是不是有 #include xxx.c 这种包含 源文件的语法因为全局变量和函数实现正常情况下都是在源文件中定义的,如果使用 #include 来包含,一定会造成符号重复的情况。解决方法就是不要使用 #i.原创 2021-09-30 17:58:58 · 299 阅读 · 0 评论 -
[工程构建] 简单的CMake模板
#versioncmake_minimum_required(VERSION 3.12)#inner var setset(CMAKE_CXX_STANDARD 11)#self-defined var setaux_source_directory(${CMAKE_SOURCE_DIR} all_cpp_file)message("")message("1.PROJECT_BINARY_DIR = ${PROJECT_BINARY_DIR}")message("2.PROJECT_S.原创 2021-09-24 10:12:15 · 326 阅读 · 0 评论 -
[工程构建] Windows开发环境一些路径的注解
前言:在windows下做c++开发,经常会遇到一些头文件找不到、符号找不到、动态库找不到等问题。因此有必要梳理一下C盘下的一些目录中到底存放了哪些东西,做这件事情:一是便于解决开发环境下的问题; 二是有利于我们开发夸系统版本运行的程序,很多时候,开发环境下正常运行的程序一旦丢到目标环境下运行,很大概率无法正常运行。架构:C盘下一般会有这样两个目录:Program FileProgram File(x86)Program File为64位应用程序的默认存放路径,Progra.原创 2020-06-18 11:15:37 · 522 阅读 · 0 评论 -
[Qt][工程构建] Qt插件技术(c++实现导出为qml组件)
前言:首先搞明白qt中插件的概念:插件:一个可在运行时加载的动态库Qt中,使用QPluginLoader加载插件既然插件是一个动态库,那么把它静态编译到可执行文件中也是允许的对于使用插件的应用程序来说,Qt 插件就是一个 QObject,只不过这个QObject需要实现插件InterfacePluginDialog::staticInstances()可以获得当前应用程序已经加载的所有插件由此,可以理解PluginDialog管理所有插件Qt中的插件分为两种:1)应用程原创 2020-07-09 11:31:00 · 1034 阅读 · 0 评论 -
[工程构建] vs生成包含pdb信息的静态库
vs在生成动态库时会一并生成pdb文件用于调试,但是在生成静态库是往往只有一个lib文件,此时如果不指定相关编译选项,那么生成的静态库将无法用于问题排查。我们可以告知vs在生成静态库是一并将pdb信息融入lib文件。把改为:这样设置以后,生成的静态库会比之前的大很多。...原创 2021-04-21 16:39:32 · 1376 阅读 · 0 评论 -
[工程构建] 常用编译相关命令
【代码】[工程构建] 常用编译相关命令。原创 2022-11-09 09:11:35 · 393 阅读 · 0 评论 -
[工程构建] qmake 中 CONFIG 内置变量
CONFIG 变量的所有值都可以 直接用作 条件语句的条件。比如:CONFIG += openglopengl { TARGET = application-gl #会执行这条语句} else { TARGET = application}原创 2021-04-22 16:49:17 · 302 阅读 · 0 评论 -
[工程构建][gcc] 关于链接
这两个命令从根本上来说作用是一样的,都是服务于链接时的库加载( 动态库.so 静态库.a)但是他们的作用是迥然不同的:-L和-I一样,用来指定搜索路径,-l则是用来指定链接时需要链接的库的名字生成静态库:gcc -o func1.o func1,c gcc -o func2.o func2.c ar -rcs libfu...原创 2018-04-25 16:20:19 · 195 阅读 · 0 评论