Linux下C++打包so文件以及使用(Socket项目示例)

简介

  • Linux环境下c++代码打包成so
  • Linux环境下so库的使用

这里还是使用我们之前的Socket示例的代码:

Linux下C++打包so文件以及使用(Socket项目示例)_第1张图片
content.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

你可能感兴趣的:(Linux下C++打包so文件以及使用(Socket项目示例))