前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下C++打包so文件以及使用(Socket项目示例)简介

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

作者头像
用户2929716
发布2018-08-23 13:25:16
3.3K0
发布2018-08-23 13:25:16
举报
文章被收录于专栏:流媒体流媒体

简介

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

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

content.png

socketLib项目打包so文件

这里我们主要看Makefile文件

代码语言:javascript
复制
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文件

代码语言:javascript
复制
main : main.cpp
    g++ -I/code/socketLib -L/code/socketLib -lmysocket   -o $@  $+

.PHONY : clean
clean :
    -rm  main

这里重点在与-I-L参数。在前面gcc编译参数中我们讲到-I指的是头文件的搜索目录,-L是动态库的搜索目录。

这里我们就成功的进行了编译。

然后运行./main发现报错

代码语言:javascript
复制
./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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.09.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • socketLib项目打包so文件
      • sockUseLib 项目如何使用so
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档