简介
- Linux环境下c++代码打包成so
- Linux环境下so库的使用
这里还是使用我们之前的Socket示例的代码:
![](https://img.haomeiwen.com/i2111324/c1f578748fa49f56.png)
socketLib项目打包so文件
这里我们主要看Makefile文件
libmysocket.so : XTcp.cpp XThread.h XTcp.h
g++ -fPIC -shared -lpthread -o $@ $+ -std=c++0x
.PHONY : clean
clean :
-rm libmysocket.so
-
-fPIC
参数 -
-shared
参数
执行make后会在当前目录下生成libmysocket.so。so文件的命名规则是lib+定义的文件名+.so。
sockUseLib 项目如何使用so
先说明两个项目都在/code
目录下。我们还是重点看Makefile文件
main : main.cpp
g++ -I/code/socketLib -L/code/socketLib -lmysocket -o $@ $+
.PHONY : clean
clean :
-rm main
这里重点在与-I
和-L
参数。在前面gcc编译参数中我们讲到-I
指的是头文件的搜索目录,-L
是动态库的搜索目录。
这里我们就成功的进行了编译。
然后运行./main
发现报错
./main: error while loading shared libraries: libmysocket.so: cannot open shared object file: No such file or directory
这句话的意思是找不到libmysocket.so这个动态库文件。虽然我们链接成功了。但是运行时候找不到动态库。这里有几个方法:
- 临时修改环境变量
只对当前的shell有效
export LD_LIBRARY_PATH=/code/socketLib
关于LD_LIBRARY_PATH可参考Linux环境变量
- 修改用户环境变量
只对当前用户有效
将export LD_LIBRARY_PATH=/code/socketLib
添加到~/.bashrc的末尾。然后source ~/.bashrc
网友评论