Итак, я люблю свой Macbook, и она меня любит. У нас есть взлеты и падения, но по большей части наши отношения были сильными. Недавно, хотя мы сражались. это началось достаточно просто. Я просил ее сделать больше, пытаясь быть более экспериментальным. Мы приносили такие вещи, как sse, быстрая математика, и разворачивались в спальню и составляли новые версии наших библиотек.
Это началось достаточно хорошо. Мы скомпилировали некоторый код с использованием новых библиотек, протестировали новые воды. Со временем наша работа как пара взлетела. Она работала быстрее, и я думал, что все хорошо и хорошо. Потом все ухудшилось. Мы привели другого игрока в микс. Ее зовут Матлаб.
Мы начали компиляцию для 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.
Матлаб почувствовал, что наши эксперименты прошли далеко. То, что они были совершенно разными версиями библиотек. Я не знаю, откуда у нее эта идея. Я сделал несколько исследований:
$ 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 имела смысл, но я как-то от нее отказался. Я предполагаю, что ссылка, которую я представил, осталась в их сознании, даже когда я вернулся к тому, как это было. Наверное, я забыл о первом правиле этих птиц и о пчелах, которые дал мой администратор sys: "Каждый раз, когда вы символизируете динамическую библиотеку, вы отдаете часть себя, чтобы вы никогда не возвращались".
В отчаянии, чтобы сохранить мою Macbook и Matlab в моей жизни, я сказал ложь, что я не горжусь:
sudo mv libsundials_cvode.1.0.0.dylib libsundials_cvode.2.0.0.dylib
Я не думал, что это сработает, но так оно и было. Теперь они компилируют мой код, и они кажутся достаточно счастливыми. Но у меня есть затяжное чувство, что я просто притворяюсь, и что моя ложь вернется, чтобы укусить меня.
Итак, поскольку Дэн Сэвидж просто игнорирует меня, я обращаюсь к вам в stackoverflow для консультаций по отношениям. Мне нужно как-то сказать моему Macbook, что для нас нет версии 1.0.0. Как я могу заставить ее послушать меня и исправить проблемы совместимости в моих отношениях без моей ужасной лжи?