linux 动态库生成
命令:g++ -Iinclude test.cpp -fPIC -shared -Wall -m64 -std=c++11 -O0 -g -o bin/test.so
-g++: 编译器的名称
-Iinclude: 添加了一个头文件搜索路径,包含名为"include"的目录
test.cpp: 被编译的源文件
-fPIC: 生成位置无关代码(Position Independent Code)
-shared: 生成共享库
-Wall: 启用所有警告信息
-m64: 生成64位的目标代码
-std=c++11: 使用C++11标准进行编译
-O0: 禁用优化选项
-g: 生成调试信息
-o bin/test.so: 将输出的共享库命名为"bin/test.so"
-fPIC
是 g++ 编译器的一个选项,用于生成位置无关代码(Position Independent Code)。这个选项通常在编译共享库(动态链接库)时使用。
位置无关代码是一种可以被加载到内存的任意地址上并仍然可以正确执行的代码。通过生成位置无关代码,可以使得共享库可以在不同的内存地址空间中重定位,提供更大的灵活性和可移植性。
具体来说,-fPIC
选项会告诉编译器生成适用于位置无关代码的汇编和目标文件。在链接过程中,再将这些位置无关的目标文件合并成最终的共享库文件。
需要注意的是,-fPIC
选项可能会导致一些性能损失,因为位置无关代码的访问方式相对较慢。因此,只有在需要生成共享库时才需要使用 -fPIC
选项。对于可执行程序或静态库,一般不需要使用该选项。
总结起来,-fPIC
是用于生成位置无关代码的 g++ 编译器选项,在编译共享库时使用,以提供更好的可移植性和灵活性。
换一种写法
写入test.sh中
#! /usr/bin/bash
INCLUDE=include
CFLAGS= -Wall -m64 -std=c++11 -O0 -g
g++ -I$INCLUDE test.cpp -fPIC -shared $CFLAGS -o bin/test.so