2016-08-07 1 views
0

Я переношу разработку Crystal Lang в новую машину под управлением OSX El-Capitan.Crystal Lang: не удается скомпилировать приложение с библиотекой MySQL на OSX El Capitan

я столкнулась с проблемой, где при компиляции приложения с привязками MySQL, кристалл компилятор выдает эту ошибку:

$ crystal build src/test1.cr 
ld: library not found for -lmysqlclient 

лязг: ошибка: команда линкер потерпела неудачу с кодом выхода 1 (использование -v, чтобы увидеть вызов)

Error: execution of command failed with code: 1: `cc -o "/Users/james/cprojects/test1/test1" "${@}" -rdynamic -lmysqlclient -lpcre -lgc -lpthread /usr/local/Cellar/crystal-lang/0.18.7_1/src/ext/libcrystal.a -levent -liconv -ldl -L/usr/lib -L/usr/local/lib` 

в предыдущих версиях OSX, Все, что мне нужно было сделать так символическая ссылка, и это делает трюк:

ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

К сожалению, El Capitan, это невозможно

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted 

Это содержимое/USR/местные/MySQL/Lib/(обратите внимание, что в настоящее время я использую v20 InstEd 18)

libmysqlclient.20.dylib libmysqld-debug.a mecab 
libmysqlclient.a libmysqld.a  pkgconfig 
libmysqlclient.dylib libmysqlservices.a plugin 

Я видел некоторые идеи об использовании install_name_tool, специфичных для XCode.

Может ли кто-нибудь, кто переехал в Эль-Капитан, пролить свет? Каков наилучший способ сделать это?

ответ

2

Из-за защиты целостности системы вы не можете создать символическую ссылку. Но это вообще не обязательно.

Просто добавьте папку, в которую установлена ​​ваша библиотека MySQL, в настройке сборки «Библиотечные пути» (или если вы не используете опцию add -L для компоновки Xcode с помощью пути). Вы добавили «/ usr/lib» и «/ usr/local/lib», но ваша библиотека MySQL находится в «/ usr/local/mysql/lib», поэтому компоновщик не может ее найти.

Для этой ситуации install_name_tool не требуется. Это может изменить пути, которые загрузчик использует для поиска библиотеки во время выполнения.

+1

Другой вариант - установить переменную среды 'LIBRARY_PATH'. Для Crystal флаг '-L' может быть передан через опцию' --link-flags' для 'crystal build'. Интересно, не возможно ли для доморощенного или любого другого, установленного MySQL, исправить ситуацию здесь? –

Смежные вопросы