这里还是使用我们之前的Socket示例的代码:
content.png
这里我们主要看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。先说明两个项目都在/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这个动态库文件。虽然我们链接成功了。但是运行时候找不到动态库。这里有几个方法:
export LD_LIBRARY_PATH=/code/socketLib
关于LD_LIBRARY_PATH可参考Linux环境变量
export LD_LIBRARY_PATH=/code/socketLib
添加到~/.bashrc的末尾。然后source ~/.bashrc