Linux上制作可执行的共享库示例


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函数。

优质内容筛选与推荐>>
1、SQL随笔之维护计划和作业的使用
2、UIViewController跳转(模态modal)
3、数据--人类建造文明的基石
4、转-ArcGIS Engine中的License设置
5、DHCP协议格式、DHCP服务搭建、DHCP协商交互过程入门学习


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号