c++ - 可移植共享对象?

标签 c++ linux portability shared-objects shared-libraries

是否可以像 Windows 中的 DLL 一样以可移植的方式使用共享对象文件?

我想知道是否有办法为 Linux 提供一个编译后的库,随时可用。同样,您可以在 Windows 中编译 DLL,它可以在任何其他 Windows 上使用(好吧,不是任何其他 Windows,但在大多数 Windows 上都可以)。

这在 Linux 中可能吗?

编辑:
我刚刚醒来并阅读了答案。有一些非常好。
我不是想隐藏源代码。我只是想提供一个已经编译好可以使用的库,所以没有编译经验的用户不需要自己动手。
因此,我们的想法是提供一个可以在尽可能多的不同 Linux 上运行的 .so 文件。
该库使用 C++ 编写,使用 STL 和 Boost 库。

最佳答案

强烈 强烈 推荐使用 LSB 应用程序/库检查器。如果您:

  • 正在使用某些发行版不可用的扩展
  • 在您的安装脚本中引入 bash-isms
  • 使用并非所有最新内核都可用的系统调用
  • 依赖于非标准库(它会告诉你哪些发行版缺少它们)
  • 还有很多,还有很多其他非常好的支票

可以得到more information here以及下载该工具。它很容易运行.. 只需解压它,运行 perl 脚本并将浏览器指向本地主机 .. 其余部分由浏览器驱动。

使用该工具,您可以轻松地让您的库/应用程序获得 LSB 认证(对于两个版本),并使发行版打包者的工作更加轻松。

除此之外,只需使用 libtool(或类似工具)之类的东西来确保您的库已正确安装,为不想链接到 DSO 的人提供静态对象(您的库需要一些时间才能出现在大多数发行版中,所以编写一个可移植程序,我不能指望它存在)并很好地评论你的公共(public)接口(interface)。

对于图书馆,我发现 Doxygen效果最好。文档非常重要,它肯定会影响我选择用于任何给定任务的库。

真的,再次检查应用程序检查器,它会为您提供可移植性问题报告,否则需要一年的时间才能将库放在野外获得。

最后,尝试使您的库易于“放入树中”,这样我就不必针对它进行静态链接。正如我所说,它可能需要几年时间才能在大多数发行版中普及。抓取你的代码,把它放在 src/lib 中并使用它,直到你的库是通用的,这对我来说要容易得多。请,请..给我单元测试,TAP (测试任何协议(protocol))是一种很好且可移植的方法。如果我破解了您的库,我需要(快速)知道我是否破坏了它,尤其是在树中或就地(如果 DSO 存在)修改它时。

关于c++ - 可移植共享对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810177/

相关文章:

linux - 为什么在非标准位置链接共享库后会出现运行时错误?

linux - 如何在shell脚本中对文本文件的多列进行排序

python - (Linux) iwatch 在文件名中使用特殊字符执行 python

c++ - C++中double/float类型二进制序列化的可移植性

c++ - 计算字符数组中一行中的字符数

c++ - 错误 LNK2019 未解析的外部符号 _main 在函数 "int __cdecl invoke_main(void)"(?invoke_main@@YAHXZ) 中引用

c - UINT_MAX + 1 等于什么?

c++ - IO流是否可移植

c++ - 如何在系统默认浏览器中打开来自 TCppWebBrowser 组件的链接

c++ - 现在在现代 C++ 中使用内联汇编有一些好处吗?