专栏首页流媒体Linux下C++打包so文件以及使用(Socket项目示例)简介

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

简介

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • gcc用法以及静态/动态链接

    -E:只进行预处理,不编译 -S:只编译,不汇编 -c:只编译、汇编,不链接 -g:编译器在编译的时候产生调试信息。 -I:指定include包含文件的...

    用户2929716
  • Jni教程(一)—Linux下jni调用简介

    代码很简单,native来声明该方法非java方法。static代码块来加载动态库。

    用户2929716
  • C++多态

    当类存在虚函数时,编译器会为该类维护一个表,这个表就是虚函数表(vtbl),里面存放了该类虚函数的函数指针。在构造类的时候增加一个虚表指针(vptr)指向对应的...

    用户2929716
  • 一种Android App在Native层动态加载so库的方案

    这篇文章通过实战案例,介绍了一种有条理的组织Native层代码层级结构的方法。并且,在良好的代码层级、作用分工的基础上,实现了动态的按需加载、卸载so库。文章...

    QQ音乐技术团队
  • Linker加载so失败问题分析

    ? 作 者 段聪,腾讯社交平台部高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。 WeTest 导读 近期测试反馈一个问题,在旧版...

    WeTest质量开放平台团队
  • 动态下发 so 库在 Android APK 安装包瘦身方面的应用

    | 导语 众所周知 Android 加载 so 文件本身就是一种运行时动态加载可执行代码的行为,所以把 so 做成动态下发的没有什么技术风险,不过要把这项技术...

    腾讯Bugly
  • Ubuntu循环登录libGL error: fbConfigs swrast等

    Ubuntu16.04更新NVIDIA驱动后,无法进入桌面,使用vim .xsession-errors

    zhangrelay
  • Eclipse编译带so库或jar包的android应用

    使用Eclipse build APK文件,只要将so文件放在与src平级的地方创建目录结构libs/armeabi,文件名格式如:libs/armeabi/l...

    一个会写诗的程序员
  • 动态加载so库的实现方法与问题处理

    前一阵项目上要求实现App的so库动态加载功能,因为这块本来就有成熟的方案,所以一般的实现没什么难度。可是到项目测试中,才发现...

    用户4464237
  • linux下加入windows ad域的

    下面是3 种linux下加入 Windows Acitve Directory 并用 AD 验证帐号的方法。 假设您的环境是  AD server:    s...

    py3study

扫码关注云+社区

领取腾讯云代金券