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 条评论
登录 后参与评论

相关文章

来自专栏LIN_ZONE

支持多文件上传,预览,拖拽,基于bootstrap的上传插件fileinput 的ajax异步上传(转载)

<link href="__PUBLIC__/CSS/bootstrap.css" rel="stylesheet">

1303
来自专栏小巫技术博客

Android多模块构建合并aar解决方案

5853
来自专栏无所事事者爱嘲笑

mac上配置react-native环境run-ios/run-android命令遇到的问题

1453
来自专栏云计算教程系列

如何在CentOS 7上用mod_proxy将Apache设置为反向代理

反向代理是一种代理服务器,它接受HTTP(S)的请求后,把它们发送到一个或多个后端服务器。反向代理非常有用,因为许多现代网络应用使用后端应用程序服务器处理传入的...

2443
来自专栏黑泽君的专栏

【MyEclipse】我们导入的jar包后, 一般没有关联源码, 需要手动进行关联!推荐这种方式。

985
来自专栏崔庆才的专栏

Scrapyd 日志输出定时清理

现在维护着一个新浪微博爬虫,爬取量已经5亿+,使用了Scrapyd部署分布式。Scrapyd运行时会输出日志到本地,导致日志文件会越来越大,几十个G,这个其实就...

8730
来自专栏BinarySec

Linux如何搜索动态库

在linux下安装一些程序,或者在做pwnable的时候经常出现没有找到动态库的情况。

1443
来自专栏大神带我来搬砖

mysql 5.7关闭password validation,为root设置空密码

在centos 7.4上yum安装了mysql 5.7后,发现mysql 5.7默认的root用户有了密码,而且设置为空密码时会受到安全限制,报错信息如下 Yo...

45010
来自专栏Dawnzhang的开发者手册

@Component注解的解析

今天在写程序的时候看见一个以前没有见过的注解(@Component),在网上查找过后,经过实践,决定把它记录下来。

1583
来自专栏雨过天晴

原 PHPStrom 9系列激活码

1804

扫码关注云+社区

领取腾讯云代金券