当前位置: 首页 > 面试题库 >

关于Linux上共享库的良好做法是什么?

谢承颜
2023-03-14
问题内容

我最近阅读了很多有关Linux上共享库的信息,这是我所学到的:

  • 共享库应html" target="_blank">嵌入,soname包括其主要版本号。就像是:libfoo.so.1
  • 其实际文件名还应包含次要版本号。就像是:libfoo.so.1.0
  • 当库文件复制到,比方说/usr/local/lib,如果ldconfig运行时,它会读取soname,创建一个名为符号链接libfoo.so.1指向libfoo.so.1.0
  • 如果要使用此库进行开发,则应首先创建一个libfoo.so指向实际文件的没有任何版本号的符号链接libfoo.so.1.0。这通常由 开发 包(打包库时)完成。

它是否正确 ?


问题答案:

建议阅读:

Ulrich Drepper的如何编写共享库的方法:http
:
//www.akkadia.org/drepper/dsohowto.pdf

Ulrich
Drepper在图书馆设计,实施和维护方面的良好实践:http
:
//www.akkadia.org/drepper/goodpractice.pdf

dsohowto更加详细。好的做法是快速阅读。



 类似资料:
  • 问题内容: 过去,我使用以下方法读取大量代码: 这样做是惯例吗? 优点和缺点是什么? 在我看来,这就像完成异常的“ Agent Orange”方式 编辑 处理方法中的预期异常 引发意外异常(一对一) 不在乎错误 那是路要走吗? 问题答案: 你不应该扔。这就是为什么。 Throwable是可抛出的事物层次结构的顶部,由and组成。由于根据定义是由不可挽救的条件引起的,因此将它们包括在方法声明中是没有

  • 问题内容: 我需要压缩部分应用程序网络流量以提高性能。我认为这意味着我需要远离一些较新的算法,例如bzip2,我认为我听说它的速度较慢。 问题答案: 您可以使用JDK中内置的Deflater / Inflater。也有GZIPInputStream和GZIPOutputStream,但这实际上取决于您的确切使用。 编辑: 阅读更多评论,看起来网络流量是HTTP。根据服务器的不同,它可能支持压缩(尤

  • 问题内容: 这是使用g ++ 进行动态共享库编译的后续版本。 我正在尝试在Linux上的C++中创建一个共享的类库。当我尝试使用库中定义的类时,我的问题开始了。我链接到的第二篇教程展示了如何加载用于创建库中定义的类的对象的符号,但是没有_使用_ 这些对象来完成任何工作。 有谁知道用于创建共享C ++类库的更完整的教程,该教程还显示了如何在单独的可执行文件中 使用 这些类?一个非常简单的教程,显示了

  • 问题内容: 我已经为JDBC连接编写了一个简单的包装程序,它可以工作,但是我想通过最佳实践来对其进行改进。它基本上有类似的方法,,,,,,和。为简单起见,我仅在此处发布前4种方法。 笔记: 可以重复使用同一查询对象,例如打开和关闭它,以及在再次打开之后。 我不是关闭每个查询的连接,而是关闭准备好的语句(这是正确的,或者我可以让准备好的语句保持打开状态,因为Connection对象会关闭它吗?) 当

  • 我正在使用Laravel5.6作为我个人项目的后端,我一直在做一些(对我来说)似乎是不好的做法,不管怎样,我想知道它是否真的那么糟糕。 首先,我使用的是Vue。js(CLI 3)项目作为客户端,我正在向我的Laravel后端发出请求。现在,为了处理通知/祝酒,我使用下一种格式: 不管我做得对还是错,我总是用同样的格式和

  • 问题内容: 我正在尝试使用通过Cmake创建的Makefile在Linux中编译共享库,但是运行make会出现以下错误: 我在CMakeLists.txt中提供以下命令,以便说我想要共享(.so)库: 为了避免上面显示的-fPIC错误,我还需要指定什么? 提前谢谢 问题答案: 需要使用-fPIC编译boost库:请看一下:如何使用boost.python中的-fPIC编译静态库。 尝试在项目中按c