2010-01-05 1036 views
5

我正在使用包含.so.0文件的市场数据源实现。然而,这些是'软链接'实际.so.0.0.0文件。为什么这样做?.so.0和.so.0.0.0文件之间的区别

当我尝试复制这些.so.0链接时,它最终将复制.so.0.0.0文件的一个确切副本,但带有.so.0前缀。

添加的注释:

,所以我有一个libfoo.so文件,它是由Java的通过JNI访问。这个libfoo.so文件实际上是一个指向libfoo.so.0.0.0的软链接,如果我没有libfoo.so,会发生什么情况。如何使用java /或其他编译代码,找出libfoo.so.0.0.0是否使用共享对象?

+3

什么是“市场数据源”?这些文件是什么?这与Java有什么关系? – bmargulies 2010-01-05 03:07:39

+0

我认为_“市场数据源”_可能是某种类型的COTS数据连接解决方​​案,它将其实现放在一个共享对象文件中,但我不是Java程序员;) – 2010-01-05 03:44:44

+0

这与java无关 - 您的所以文件是由平台相关的应用程序找到的,例如Linux上的'ld'。 – 2010-01-05 15:59:56

回答

7

这样程序就可以绑定到任何具有相同接口的libfoo版本(我想要libfoo的最新更新),或者绑定到特定的版本(我想稳定性和只测试我测试的确切版本) 。

+0

所以我有一个libfoo.so文件,它正在通过jni由java访问。这个libfoo.so文件实际上是一个指向libfoo.so.0.0.0的软链接。 如果我没有libfoo.so,会发生什么情况。如何使用java /或其他编译代码,找出libfoo.so.0.0.0是否使用共享对象? – user242591 2010-01-05 03:31:07

+0

如果在Linux上,请阅读'ld'手册页。 – 2010-01-05 16:00:30

+0

如果你有libfoo.so.0.0.0,你应该总是有libfoo.so.0和libfoo.so,这是libtool工作方式的一部分;如果它不存在,他们会生成错误的库 – 2010-01-05 23:15:05

8

.0和.0.0.0文件存在,这样的版本可能发生:

  • foo.0代表.0版本的库。该库的所有.0版本将使用相同的接口,但可能有不同的实现。 (希望后面的实现比以前的实现具有更少的bug。)

  • foo.0.0.0代表.0版本的特定实现。

现在没有用,有软链接。但是,可能发生的情况如下:

foo的程序员在他的库中发现一个错误。他释放foo.0.0.1。现在foo.0链接到foo.0.0.1。然后发生两件事:

  • 链接到foo.0的所有文件都会自动更新为foo.0.0.1。
  • 链接到foo.0.0.0所有文件都将继续使用旧的foo.0.0.0
+0

进一步扩展这几个级别,您可以通过链接到'libfoo.0.0.0'或任何匹配的接口版本与'libfoo.0'或者使用'libfoo'完成任何版本。 – 2010-01-05 03:46:34

+0

为基本问题道歉,但如何指定此链接。我怎样才能指定jni应该使用libfoo.so而不是libfoo.so.0.0.0? – user242591 2010-01-05 05:04:06

+0

Hihi,coder zambesi。可悲的是,Java文件没有多大帮助:http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#loadLibrary(java.lang.String)说:“在库名称映射到实际系统库的依赖系统。“可能有一些帮助在http://stackoverflow.com/questions/1010503/how-to-debug-a-java-system-loadlibrary-error-in-linux祝你好运。 – 2010-01-05 05:20:30