本文主要是介绍命令行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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!