命令行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

相关文章

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.