使用Makefile链接so库文件

初学Makefile,权当是笔记,希望对别人有些帮助吧。

------------------------------------------------------------------------------------

本次例子目录结构如下:


目录说明:

lib目录是我自己写的一个so库文件,名为libA.so,很简单,里面的内容截图如下:


-------------------------------------------------------------------------------------------------------------

main目录是测试程序所在目录,用于测试libA.so,里面的内容截图如下:


---------------------------------------------------------------------------------------------------------------------

release目录用于存放编译后的so库文件和编译后的测试程序,截图如下:


-----------------------------------------------------------------------------------------------------------------------

因为main.out用于测试libA.so,所以编译时我们必须先编译libA.so,

libA.so的Makefile内容如下:

exe=../release/libA.so

### 链接目标文件
$(exe):libA.o
	gcc -o $(exe) -lstdc++ -fPIC -shared -Xlinker libA.o
	
###	编译源文件
libA.o:libA.cpp
	gcc -lstdc++ -c libA.cpp
	
clean:
	-rm *.out *.o *.bak

---------------------------------------------------------------------------------------------------------------------------------------

libA.cpp内容如下:

#include <stdio.h>

void ShowHello()
{
	printf("hello libA \n");
}
----------------------------------------------------------------------------------------

main.cpp的Makefile内容如下:

exe=../release/main.out

### 链接目标文件
### -L ../release  用于指定libA.so所在目录
### -lA  链接库文件libA.so
$(exe):main.o
	gcc -o $(exe) -lstdc++ -Xlinker main.o -L ../release -lA
	
###	编译源文件
main.o:main.cpp
	gcc -lstdc++ -c main.cpp
	
clean:
	-rm *.out *.o *.bak

--------------------------------------------------------------------------------------------------------------

main.cpp内容如下:

#include<stdio.h>

extern void ShowHello();

int main(void)
{
	ShowHello();
	return 0;
}

--------------------------------------------------------------------------------

编译好libA.cpp和main.cpp,跳到release运行main.out,效果如下:



-----------------------------------------------------------------------------------------------------------------------------------------------------

题外话:


运行程序如果提示找不到xxx.so,
敲以下命令即可:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH      // 把当前目录加入到库文件搜索目录环境变量

我当时的错误提示如下:

 ./main.out 
./main.out: error while loading shared libraries: libA.so: cannot open shared object file: No such file or directory







评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friendan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值