命令行gcc编译一个包含多个头文件的cpp项目并生成动态库.so

2024-09-05 01:04

本文主要是介绍命令行gcc编译一个包含多个头文件的cpp项目并生成动态库.so,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如题,现有项目路径状态大致如下:
1、项目中用到的第三方库(也就是头文件.h等内容),存放在./3rdparty路径下 。
2、源码路径(也就是主要的.cpp .h文件),存放在./src路径下。

./src路径下执行命令:

$ gcc -I 头文件路径1 -I 头文件路径2 -c xxx.cpp -fPIC -o xxx.o
$ gcc -shared -o libxxx.so xxx.o

注:.
so库文件是在linux下使用的库文件,文件前缀须为lib;
-I 参数:用于添加头文件的搜索路径。这个选项后面跟着的是头文件所在的目录路径,如果有多个目录,可以重复 -I 选项,每个 -I 后面跟着一个目录路径;如果遇到编译时提示头文件找不到时,可使用 -I
-c 参数:用于让gcc仅编译源代码文件,不进行链接。
编译过程通常分为两个步骤:编译(Compilation)和链接(Linking)。编译是将源代码(.c 文件)转换成目标代码(.o 文件),链接是将一个或多个目标代码文件与库文件结合起来生成最终的可执行文件。
-fPIC 参数:用于生成位置无关代码。位置无关代码是一种可以在内存中的任何位置执行的代码,可用于创建动态库,因为动态库在运行时可能会被加载到内存中的任意位置。
-o 参数:用于指定最终生成的可执行文件或目标文件的名称。
-shared 参数:用于生成动态库(也称为共享库)。动态库是一种在运行时被加载的库,而不是在编译时静态链接到程序中。这可以让多个程序共享同一份库的副本,节省内存和磁盘空间,且易更新库。

这篇关于命令行gcc编译一个包含多个头文件的cpp项目并生成动态库.so的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137531

相关文章

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时