Entonces, amo mi Macbook, y ella me ama. Tenemos nuestros altibajos, pero en su mayor parte nuestra relación ha sido fuerte. Recientemente, tuvimos una pelea. comenzó simplemente lo suficiente. Le estaba pidiendo que hiciera más, tratando de ser más experimental. Trajimos cosas como sse, matemática rápida y desenrollarnos en el dormitorio y compilamos nuevas versiones de nuestras bibliotecas.Versión de compatibilidad de reversión de bibliotecas en Mac OS X
Comenzó bastante bien. Compilaríamos un código usando las nuevas bibliotecas, probando las nuevas aguas. Con el tiempo, nuestra actuación como pareja se disparó. Ella estaba trabajando más rápido y pensé que todo estaba bien. Entonces las cosas empeoraron. Trajimos a otro jugador a la mezcla. Su nombre es Matlab.
Empezamos la compilación de 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
compilar y vincular funcionaba muy bien. Pero entonces comenzó el problema:
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 sintió que nuestros experimentos habían llegado demasiado lejos. Que eran versiones totalmente diferentes de las bibliotecas. No sé de dónde sacó esta idea. Hice algunas investigaciones:
$ 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)
El problema estaba en libsundials_cvode. No hubo versión 2, nunca hubo. Para empeorar las cosas, mi Macbook tomó el lado de Matlab. Intenté desinstalar, eliminando todas las referencias a las cosas nuevas, incluso borré nuestros archivos make e intenté comenzar de nuevo. Traté de reconstruir nuestras bibliotecas a la vieja usanza. Pero no soltaron la elusiva versión 2. No sabía cómo darles lo que querían. Simplemente no era lo suficientemente hombre para cumplir con sus expectativas de mí.
Lo único que podía adivinar era que en algún punto, la versión 2 tenía sentido, pero que de alguna manera me alejé de ella. Supongo que el vínculo que les presenté se quedó en sus mentes incluso cuando volví a la forma en que estaba. Supongo que olvidé la primera regla de las aves y la charla de las abejas dada por el administrador de mi sistema: "Cada vez que simbolizas una biblioteca dinámica, das una parte de ti que nunca volverás".
En su desesperación para mantener tanto mi Macbook y Matlab en mi vida, he dicho una mentira que no estoy orgulloso de:
sudo mv libsundials_cvode.1.0.0.dylib libsundials_cvode.2.0.0.dylib
No pensé que iba a funcionar, pero lo hizo. Ellos compilan mi código ahora y parecen lo suficientemente felices. Pero tengo la sensación persistente de que solo lo estoy fingiendo, y que mi mentira volverá a morderme.
Así que, como Dan Savage simplemente me ignora, me dirijo a ti stackoverflow para consejos sobre relaciones. Necesito de alguna manera decirle a mi Macbook que, no, la versión 1.0.0 es suficiente para nosotros. ¿Cómo puedo lograr que me escuche y solucione los problemas de compatibilidad en mi relación sin mi horrible mentira?
Ojalá lo supiera ... Sin embargo, todas las preguntas de StackOverflow deben volver a escribirse como columnas de consejos de relación. Estoy votando: espero que alguien más pueda ayudar. – stderr