当前位置:  技术问答>linux和unix

请问:linux 下 如何在一个动态库(so文件)中到处 C++类?感激不尽!

    来源: 互联网  发布时间:2015-12-20

    本文导语:  如题。有知道的大哥帮帮忙。 | 和C函数没有什么不同。假设你要导出的函数为func,类为myclass 1.正常编译C++动态连接库(同C动态连接库一样)。 2.C函数在动态库中的函数名是_func,而C++则会添...

如题。有知道的大哥帮帮忙。

|
和C函数没有什么不同。假设你要导出的函数为func,类为myclass
1.正常编译C++动态连接库(同C动态连接库一样)。
2.C函数在动态库中的函数名是_func,而C++则会添加decoration.变为类似于 _myclass@funcAXFAZB 或 _func@myclassAXFAZB ,后面的大写字母中可能包含有参数和返回值类型信息。每一个函数有一个这样的原型,包括构造函数。
3.当你使用myclass时, 包含myclass的头文件,然后在编译命令行-lmyclasslib (也像使用普通C函数库),正常在你的程序中申明使用myclass就行了。编译器会为你照顾一切的(比如生成decorated function name 并 找到正确的函数位置)。
4.如果你需要使用动态加载来使用其中的函数(dlopen,dlsym),那么,你必须自己找出库中myclass::func的符号名=_func@myclassAXFAZB 。方法也很简单,用nm命令,它可以看到ELF文件中所有的符号,T or t的为导出函数,其他符号不要看了,有些是导入符号。 这种符号如果函数原型不变,他永远不会变。


最后.关于LZ的疑问很可能来自于同windows中动态连接库(使用了MFC动态库的类的导出问题)的对照。动态连接库是很简单的Bin文件,同exe一样,只是代码(函数)和数据(常量或静态数组)的集合。代码和数据都是通过符号表识出来的,只要你知道了符号就能使用这个符号所指的代码和数据,that's it。非常简单的规则。遗憾的是,MS永远喜欢将事情复杂化,MFC类导出的问题是来源于它的动态库hell问题,简单讲就是你连我,我连他,他又连我,最后连到了地狱(无论是在运行时还是编译时)。他们的解决办法就是指出那些东西要导出,所谓的导出表(.dep或__declexport)。而linux不需要,因为我们有强大的动态连接器(ld.linux),他帮我们照顾所有的问题,也就是说,某个函数是否要导出,是由 编译时的动态连接器+运行时动态连接器最后确定。而这个代码集合(so)里面的函数永远没有不同。

|
up

    
 
 

您可能感兴趣的文章:

  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • 请问在C文件中如何引用 C++ 生成库?
  • 请问c++程序怎么编?
  • 请问在Linux中用哪种编译器调试C++较好?
  • 请问在C++中能编写SDL游戏程序吗
  • 请问高手在solaris上开发c++程序用什么呀,还是vi么!
  • 请问c++中的DWORD是什么类型??
  • 请问如何在linux环境下编写C++
  • 请问关于java和c++混合编程的问题
  • 请问,unix下的编译器支持c++的RTTI吗?
  • 请问IBM UNIX AIX Uersion 5 如何编译C++程序?
  • 请问如何在一个java程序中加载 C或c++程序??
  • 请问怎么样使用 Linux下的C++集成开发环境。
  • 请问gcc是不是要加什么参数才能编译C++程序的呢
  • 请问大家在linux下用什么工具开发C++程序?
  • 请问linux下可以使用c++么?
  • 请问在unix下如何开发C++?
  • 请问高手:sun下如何编译informix的C++,也就是嵌套sql的c++,急呀
  • 请问学习c++用什么工具最好?
  • 请问如何设置vi高亮显示c++语法
  • 请问那里有linux下的c语言的库函数说明下载? 感激不尽
  • 请问谁能提供一下MD5的算法的代码啊,要求非VC的C++版本(即Unix下的),感激不尽,100分哦^_^
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 各位大虾,请问哪里有JDK API的chm格式的help下载,感激不禁!
  • 求助:我要做linux下的集群,请问各位我应怎样开始?走过来的人,能否给我个路线?在线等。感激涕零。
  • 在线等待,请问在JDK中如何画同心圆?用什么方法?如有程序范例不胜感激!
  • linux下用eclipse进行开发,尤其打开较大的python代码模块,老是会卡,请问大家有没有好点的解决办法,如能提供具体设置,不胜感激
  • 紧急求救,请问谁的linux中有libXm.so.2这个文件,请寄给我并请告诉我路径,真诚期待,万分感激!(sailoremail@163.com)
  • 救助!请问怎样实现对真实下载次数的统计,能给例子吗?万分感激!
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问高手在solaris上开发c++程序用什么呀,还是vi么! iis7站长之家
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3