一.
编译的时候
(此时main.cpp头文件是#include "Person.h")
g++ main.cpp ../Person/Person.cpp -o main -I../Person
解析:
../Person/Person.cpp 链接main.cpp的上一层文件夹Person内的Person.cpp
-I../Person main.cpp中包含的Person.h头文件在上一层文件夹Person内,用-I代表头文件路径
ps:在main.cpp的头文件包含中写成
#include "../Person/Person.h"
应该就不需要加-I了,但是Person.cpp文件应该链接进去
二.
g++ main.cpp -o main:动态编译
g++ main.cpp -o main_static -static:静态编译,编译时间长,编译得到的文件main_static比上一个文件main大很多
三.
g++ Person.cpp -fpic -shared -o libPerson.so
-fpic:表示Person.cpp里的函数与代码位置不相关,即通过头文件名字找到引用
-shared:表示是一个动态库
libPerson.so:必须以lib开头,以.so结尾,Person才是库的名字
此时,使用动态链接库Person编译main.cpp
g++ main.cpp -o main -I../Person -L../Person -lPerson
-L:表示动态链接库的位置,如果不指出,则会自动到系统的环境变量中去找
-l:动态链接库的名字
此时运行main(即./main)会报错,原因是没有指定库文件的路径
两种方案,
一是把这个so文件拷贝到系统的PATH下,
二是通过写执行脚本的方式,即
export LD_LIBRARY_PATH=../Person
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)