http://bbs.hadoopor.com/thread-3313-1-1.html
x.cpp为共享库libx.so的实现,b.cpp为可执行b的实现。
x.cpp文件内容:
#include <stdio.h>
#include <stdlib.h>
// 使用C++作为编译器
void woo()
{
printf("woo\n");
}
// foo作为共享库的入口,必须为C函数
extern "C" foo()
{
printf("foo\n");
exit(0); // 请注意这里必须调用,否则输出foo后会有段错误
}
b.cpp文件内容:
int main()
{
extern void woo();
extern "C" void foo();
woo();
foo();
return 0;
}
编译x.cpp为可执行的共享库:
g++ -g -o libx.so -fPIE -pie -nostartfiles -Wl,-e,foo -rdynamic x.cpp
-fPIE -pie是保证共享库可以执行,其中-fPIE编译参数,表示生成与位置无关的可执行代码(-fPIC只是生成与位置无关的非可执行代码),-pid是链接参数;-Wl,-e,foo指定共享库的入口函数,相当于可执行程序的main函数;如果没有-nostartfiles,则链接时会报main函数未定义;-rdynamic也是必须的,否则编译b.cpp时会报找不到foo定义;如需查看详细的编译链接过程,加上-v参数。请注意不能包含-shared参数,否则运行共享库时直接段错误。
编译b.cpp为可执行文件:
g++ -g -o b -L. -lx  b.cpp
成功之后,libx.so和b都是可执行的了,其中libx.so的入口是foo,而b的入口是main函数。

转载于:https://www.cnblogs.com/aquester/archive/2012/07/24/9891849.html

Linux上制作可执行的共享库示例相关推荐

  1. Linux下构建自己的C++共享库并配合pkg-config生成链接选项

    Linux下构建自己的C++共享库并配合pkg-config生成链接选项 本文将以C++链表的新建.打印操作为例构建自己的共享库,并在实际调试代码时尝试使用.我们在做数据结构题时经常需要将链表打印出来 ...

  2. 【教程】如何将自己的编程猫作品在MAC或LINUX上制作成独立应用程序

    你有想过把编程猫的作品通过应用程序的方式把它发送给同学或朋友吗?但是现在的编程猫格式工厂只能制作exe应用,无法将它转成mac应用或linux应用,所以这篇文章将教会你们如何将自己的作品在Mac或Li ...

  3. 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件

    转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...

  4. linux如何进入解释器路径,如何更改解释器路径并将命令行参数传递给Linux上的可执行共享库?...

    以下是"可执行"共享库的最小示例(假定文件名:)mini.c: // Interpreter path is different on some systems //+defini ...

  5. linux安装与包管理(管理共享库)

    静态和动态可执行程序 Linux 系统有两类可执行程序. 静态链接的 可执行程序包含它们所需的所有库函数.所有库函数都链接到可执行程序中.它们是完整的程序,不依赖于外部的库.静态链接程序的优点是它们不 ...

  6. 如何在 Linux 上永久挂载一个 Windows 共享

    导读 如果你已经厌倦了每次重启 Linux 就得重新挂载 Windows 共享,读读这个让共享永久挂载的简单方法. 在 Linux 上和一个 Windows 网络进行交互从来就不是件轻松的事情.想想多 ...

  7. 如何在Linux上制作一个屏幕录像视频教程

    一图胜千言,一个精心设计的指导视频更是能给你带来良好体验.Linux上有你需要的制作有用且高质量教学视频的所有工具.我们将用强大的kdenlive视频编辑器和Audacity音频录制器和编辑器制作一个 ...

  8. 在 Linux 上创建一个加密文件保险库

    关注微信公众号:厦门微思网络 最近,我演示了如何在 Linux 上使用统一密钥设置(Linux Unified Key Setup)(LUKS)和 cryptsetup 命令 实现全盘加密.虽然加密整 ...

  9. Linux上用Jenkins执行shell

    目录 安装Jenkins Jdk安装 安装Jenkins 打开防火墙 自定义指定端口9000启动jenkins 浏览器登录 修改管理员密码 创建一个执行shell的任务 构建刚创建的Jenkins任务 ...

最新文章

  1. python语法书籍推荐_python语法的书
  2. bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务
  3. java autovalue_Android AutoValue使用和扩展库
  4. Java中注释的使用
  5. 我的学习网址(未完)
  6. 电脑常见故障_电脑知识打印机常见故障及排除方法系列(四)
  7. Alex 的 Hadoop 菜鸟教程: 第4课 Hadoop 安装教程 - HA方式 (2台服务器)
  8. 卷积神经网络与深度学习
  9. 百度 图像识别Api logo识别 基于java的Demo
  10. 电信无限流量卡无服务器,电信无限流量卡实测 牟足劲一天刷30GB
  11. 天载网上炒股大盘缩量诱多
  12. Fault tolerant heap shim applied to current process. This is usually due to previous crashes
  13. JavaScript案例之电影院电子选票
  14. 当前数据中心运维管理工作中存在的问题
  15. 读取obj+mtl 文件 (OpenGL C++)
  16. Spark 调优技巧总结
  17. python中quit函数用法_quit(code=None)函数和exit(code=None)函数的使用举例
  18. 同程旅游火车票部门面经
  19. 起因:想要用visio画框图
  20. 基于JAVA房产中介预约看房系统设计与实现 开题报告

热门文章

  1. 五笔字根表识别码图_精选五笔输入法拆字原则,值得收藏
  2. 2.c语言编译预处理,c语言第03章-编译预处理2.ppt
  3. sqlite java excel,Android将Excel表数据导入SQLite数据库
  4. php广告轮播效果,使用swiper组件实现轮播广告效果
  5. 《C语言程序设计基础》第2章作业,清华大学出版社-图书详情-《C语言程序设计基础实验与题解》...
  6. Elastricsearch 索引操作详解(快速入门、索引管理、映射详解、索引别名)
  7. 万字大白话带你重拾JVM
  8. android位置传感器
  9. Python的零基础超详细讲解(第四天)-Python的数据类型
  10. 论Docker swarm与Kubernetes孰强孰弱