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

Sev*_*ess 14 unix version-control matlab 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
Run Code Online (Sandbox Code Playgroud)

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

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.
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

我唯一可以猜到的是,在某些时候,版本2是有道理的,但我以某种方式退出了它.我想我所提出的链接仍然存在于他们的脑海中,即使我回到原来的样子.我想我忘记了鸟类和蜜蜂的第一条规则谈话由我的系统管理员,因为"每一次你symbolink一个动态库时间,你给自己的部分远,你永远不会回来了."

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

sudo mv libsundials_cvode.1.0.0.dylib libsundials_cvode.2.0.0.dylib 
Run Code Online (Sandbox Code Playgroud)

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

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

gaw*_*bul 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
Run Code Online (Sandbox Code Playgroud)

我现在有以下内容:

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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

另外,在您的示例中,符号链接可能比 mv 更好?