Mac OS X上的库的回滚兼容版本

时间:2011-04-02 02:13:53

标签: matlab unix version-control symlink

所以,我喜欢我的Macbook,她爱我。我们有起伏,但在大多数情况下,我们的关系一直很强大。最近虽然我们打架了。它开始时就足够了。我曾要求她做更多,试图更具实验性。我们带来了诸如sse,快速数学和展开到卧室之类的东西,并编译了我们库的新版本。

它开始时已经足够好了。我们使用新库编译一些代码,测试新的水域。随着时间的推移,我们的表现随着夫妻飙升她工作得更快,我认为一切都很好。然后事情变得更糟。我们带来了另一名球员。她的名字是Matlab。

我们开始编译Matlab,

mex CC="gcc" CFLAGS="\$CFLAGS -msse -msse2 -msse3 -ffast-math -ftree-vectorize" LDFLAGS="\$LDFLAGS -msse2 -msse3 -ffast-math -ftree-vectorize" -I/usr/local/include -L/usr/local/lib -lsundials_cvode -lsundials_nvecserial -v -o kry_new.mexmaci64 mex_main.c

编译和链接工作得很好。但后来麻烦开始了:

kry_new(param,init,0:60:240,abstol,rtol,1)
??? Invalid MEX-file
'/Users/Andrew/Documents/MATLAB/het_optim/kry_new.mexmaci64':
dlopen(/Users/Andrew/Documents/MATLAB/het_optim/kry_new.mexmaci64, 1):
Library not loaded: /usr/local/lib/libsundials_cvode.1.dylib
  Referenced from: /Users/Andrew/Documents/MATLAB/het_optim/kry_new.mexmaci64
  Reason: Incompatible library version: kry_new.mexmaci64 requires version
  2.0.0 or later, but libsundials_cvode.1.dylib provides version 1.0.0.

Matlab认为我们的实验已经走到了尽头。它们是完全不同的库版本。我不知道她在哪里得到这个想法。我做了一些调查:

$ otool -L kry_new.mexmaci64 
kry_new.mexmaci64:
    /usr/local/lib/libsundials_cvode.1.dylib (compatibility version 2.0.0, current version 2.0.0)
    @loader_path/libsundials_nvecserial.0.0.2.dylib (compatibility version 0.0.0, current version 0.0.2)
    @loader_path/libmx.dylib (compatibility version 0.0.0, current version 0.0.0)
    @loader_path/libmex.dylib (compatibility version 0.0.0, current version 0.0.0)
    @loader_path/libmat.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.4.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

问题出在libsundials_cvode上。没有版本2,从来没有。更糟糕的是,我的Macbook采用了Matlab的一面。我尝试卸载,删除所有对新事物的引用,甚至删除了我们的make文件并尝试重新开始。我试图用旧的方式重建我们的库。但他们不会放弃难以捉摸的版本2.我不知道如何给他们想要的东西。我只是不够满足他们对我的期望。

我唯一可以猜到的是,在某些时候,版本2是有道理的,但我以某种方式退出了它。我想我所提出的链接仍然存在于他们的脑海中,即使我回到原来的样子。我想我已经忘记了那些鸟类的第一条规则和我的系统管理员给出的蜜蜂讲话,“每当你象征着一个动态的图书馆,你就会把你自己的一部分带走,你永远不会回来。”

在绝望地将我的Macbook和Matlab保留在我的生活中,我说谎,我并不为此感到骄傲:

sudo mv libsundials_cvode.1.0.0.dylib libsundials_cvode.2.0.0.dylib 

我认为它不会起作用,但确实如此。他们现在编译我的代码,他们看起来很开心。但我有一种挥之不去的感觉,我只是假装它,我的谎言会回来咬我。

所以,既然Dan Savage只是忽略了我,我会转向你的stackoverflow来获取关系建议。我需要以某种方式告诉我的Macbook,不,版本1.0.0对我们来说已经足够了。如果没有我可怕的谎言,我怎样才能让她听我的话并解决我的关系中的兼容性问题?

1 个答案:

答案 0 :(得分:2)

打扰一下,如果我正在咆哮错误的树,但据我所知,Sundials是2.4版(个别库是2.6)? https://computation.llnl.gov/casc/sundials/download/download.html。你有没有试过从这里的来源编译?

我刚刚在运行10.6.7的Mac Pro上编译和安装,没有任何问题!您需要使用以下配置来安装.dylib,否则它只生成.la和.a

./configure --enable-shared

我现在有以下内容:

w125-244:sundials-2.4.0 stevemoss$ ls -al /usr/local/lib/libsundials_cvode*
-rwxr-xr-x  1 root  staff    4136 28 Apr 16:07 /usr/local/lib/libsundials_cvode.1.0.0.dylib
lrwxr-xr-x  1 root  staff      29 28 Apr 16:07 /usr/local/lib/libsundials_cvode.1.dylib -> libsundials_cvode.1.0.0.dylib
-rw-r--r--  1 root  staff  512704 28 Apr 16:07 /usr/local/lib/libsundials_cvode.a
lrwxr-xr-x  1 root  staff      29 28 Apr 16:07 /usr/local/lib/libsundials_cvode.dylib -> libsundials_cvode.1.0.0.dylib
-rwxr-xr-x  1 root  staff     878 28 Apr 16:07 /usr/local/lib/libsundials_cvode.la
-rwxr-xr-x  1 root  staff    4136 28 Apr 16:07 /usr/local/lib/libsundials_cvodes.2.0.0.dylib
lrwxr-xr-x  1 root  staff      30 28 Apr 16:07 /usr/local/lib/libsundials_cvodes.2.dylib -> libsundials_cvodes.2.0.0.dylib
-rw-r--r--  1 root  staff  926048 28 Apr 16:07 /usr/local/lib/libsundials_cvodes.a
lrwxr-xr-x  1 root  staff      30 28 Apr 16:07 /usr/local/lib/libsundials_cvodes.dylib -> libsundials_cvodes.2.0.0.dylib
-rwxr-xr-x  1 root  staff     885 28 Apr 16:07 /usr/local/lib/libsundials_cvodes.la

w125-244:sundials-2.4.0 stevemoss$ otool -L /usr/local/lib/libsundials_cvode.dylib
/usr/local/lib/libsundials_cvode.dylib:
    /usr/local/lib/libsundials_cvode.1.dylib (compatibility version 2.0.0, current version 2.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.10)

另外,也许一个符号链接可能比你的例子中的mv更好?