设为首页 加入收藏

TOP

Linux里的函数库(Library)
2014-11-24 07:51:28 来源: 作者: 【 】 浏览:0
Tags:Linux 函数 Library


这里主要是讲动态库的问题。


当编辑好动态库的源代码之后,使用下面的命令进行编译。


所谓的name mangle,也就是C++在声称object file的时候,会把函数名变成一些不易利用的名字,而不是像C那样是完全照字面上的函数名那样存在object file里面。这个可以通过nm命令来查看。


如果对一个C的函数库使用nm来查看里面的的定义,比如我在代码里面定义了test()函数,那么在nm输出里面也可以看到test。


但是在C++的nm输出里面,则是没有test的,说明编译器将名字做了一些变换(mangle)。


如果想要在C程序里面直接调用C++里面定义的函数的话,那么会在链接的时候出现undefined reference的错误。所以需要在写C++的做一些工作。


我将这个过程写作C++ -> C


如果要将C++里面的函数暴露成C也可以调用的话,那么我们需要将函数的定义放在extern "C" directive里面,具体如下。



这样就可以将函数暴露给C了。


而如果要在C++里面调用C的函数的话,也是要做相应的一些操作的。我们需要在编译C++程序的时候,让编译器之后我们调用的函数是从C里面来的。


在C++里面将函数声明放在extern "C" directive后面就可以了。如下:



使用动态加载的方式加载函数库


需要使用dlfcn.h函数库。如下是一个使用的过程的例子:



然后使用下面的命令编译:


gcc -rdynamic -o progdl progdl.c -ldl


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C里面的scanf对于空白字符的处理 下一篇8大你不得不知的Android调试工具

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)