linux – 使用dlopen()动态加载共享对象
我正在开发一款普通的X11应用程序.
默认情况下,我的应用程序只需要libX11.so和标准的gcc C和数学库. 为了实现这个行为,我使用运行时加载,即libXrenes,libXrender和libasound应该是dlopen()ed. 因此,App可以在没有这样的库的情况下运行. 现在我的问题: What library names should I use when calling dlopen()? 我发现这些不同于发行版和发行版. > libXfixes.so 但是,在Ubuntu上,名称附有版本号,如下所示: > libXfixes.so.3 因此尝试打开“libXfixes.so”会在Ubuntu上失败,尽管lib显然存在. 多谢你们, 安迪 解决方法
你应该使用图书馆的SONAME.你可以通过使用readelf -d [libname]来看到它.
例如,在我的一台Fedora Linux机器上,C库的SONAME是libc.so.6. 从.so名称到.so.6名称的符号链接无法保证.这些符号链接仅用于编译软件,通常不安装在没有开发包的系统上. 您不希望最终加载具有不同数字的版本,因为数字更改表明主要的API差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |