Сборка OTP 18.3 в библиотеке ODBC OS X 10.9 — ошибка проверки заголовка

Итак, я пытаюсь собрать Erlang/OTP 18.3 на OS X 10.9 Mavericks и, похоже, столкнулся с проблемой, когда библиотеки/заголовки odbc не найдены.

При первой попытке запустить configure я получил сообщение:

*********************************************************************
**********************  APPLICATIONS DISABLED  **********************
*********************************************************************

odbc           : ODBC library - header check failed

Я искал любую информацию, которую мог найти о библиотеках ODBC в OS X, и нашел предыдущий вопрос/ответ, в котором отмечалось, что "Начиная с OS X 10.9 (Mavericks) Apple перестала включать заголовочные файлы iODBC SQL", предполагая, что это может быть ключевой проблемой.

Поэтому я взял libiodbc с iodbc.org, собрал версию для OS X и попробовал еще раз:

odbc           : ODBC library - header check failed

Хм. ОК, по-видимому, сборка для OS X по умолчанию сбрасывает библиотеки/заголовки в /Library/Frameworks. Может процесс настройки OTP не знает туда заглянуть? Поэтому я снова попытался собрать libiodbc, на этот раз с параметром --prefix=/usr/local. И:

odbc           : ODBC library - header check failed

Я могу убедиться, что /usr/local/include содержит iodbcext.h, iodbcunix.h, isqlext.h, sql.h, sqltypes.h, iodbcinst.h, isql.h, isqltypes.h, odbcinst.h, sqlext.h , sqlucode.h, поэтому определенно кажется, что заголовки должны быть обнаружены.

Я просмотрел все предыдущие обсуждения в списке рассылки erlang-questions об odbc и сборках и нашел старое сообщение, которое предполагает, что было время, когда процесс настройки не распознавал поиск iodbc в OS X... но быстрая проверка lib/odbc/configure.in под erlang директор исходного кода похоже показывает, что патч, предложенный в этом сообщении, был свернут, и это больше не должно быть проблемой.

Что мне не хватает? Есть ли другой способ указать configure, где искать libiodbc? Что-то еще нужно?

В противном случае - могу ли я каким-то образом отладить/изменить процесс настройки?

Изменить

По предложению @legoscia я заглянул внутрь lib/odbc/config.log. Там много всего, поэтому я скорее свяжу полный файл, чем опубликую его, но есть две ошибки которые кажутся актуальными:

conftest.c:29:10: fatal error: 'sql.h' file not found
...
conftest.c:29:10: fatal error: 'sqlext.h' file not found

Это странно, потому что, как я уже говорил, я могу убедиться, что /usr/local/include содержит эти файлы. Я использую --with-odbc=/usr/local. А позже в config.log под заголовком Output Variables также указывается, что он знает ODBC_INCLUDE='-I/usr/local/include'. Вроде знает где искать, и файлы в том месте, но что-то их не видит.


person Weston C    schedule 30.08.2016    source источник
comment
Как вы пытаетесь строить? Керл у меня работает нормально.   -  person Nathaniel Waisbrot    schedule 31.08.2016
comment
Какие сообщения об ошибках появляются в lib/odbc/config.log?   -  person legoscia    schedule 31.08.2016
comment
Вы можете попробовать установить pre - скомпилирован iODBC 3.52.12 для OS X, который предоставляет вам все заголовки, полную поддержку фреймворков для графического интерфейса пользователя, полную поддержку 64-разрядных и 32-разрядных систем и т. д., а также размещает все там, где OS X ожидает их найти. . (Отказ от ответственности: Мой работодатель ведет и поддерживает iODBC.)   -  person TallTed    schedule 01.09.2016
comment
Лучше использовать DMG от ErlangSolutions: packages.erlang-solutions.com/erlang/esl-erlang/   -  person Ruel    schedule 05.09.2016
comment
@legoscia - отличное предложение, прочитайте журнал, не много новой информации, но я соответствующим образом обновил свой вопрос.   -  person Weston C    schedule 11.09.2016


Ответы (2)


Читая lib/odbc/configure.in, это похоже на ошибку. Похоже на проверку sql.h и sqlext.h (на строка 120) не учитывает путь, указанный в --with-odbc. Я предлагаю сообщить об этом по адресу https://bugs.erlang.org/.

person legoscia    schedule 12.09.2016
comment
Я пытаюсь понять это достаточно хорошо, чтобы написать отчет об ошибке; Я думаю, что вижу проверку этого пути на строки 150-158? Но я не знаю, что это значит, что это после строк, на которые вы ссылаетесь. И мне также интересно, есть ли способ проверить значения $host_os и $with_odbc (я пытался добавить echo >&1 "blerg: $with_odbc" в configure.in, но это, похоже, ничего не дало). - person Weston C; 22.09.2016
comment
Да, эти строки устанавливают путь включения в соответствии с настройкой, но это происходит после того, как для переменной odbc_required_headers установлено значение no, что приводит к сбою конфигурации. После изменения configure.in вы запускали ./otp_build autoconf в каталоге верхнего уровня? - person legoscia; 23.09.2016

Изучив проблему в течение некоторого времени, пытаясь задать более правильные вопросы или создать хороший отчет об ошибке для сопровождающих Erlang... Я обнаружил, что это вовсе не проблема исходного дистрибутива Erlang, а скорее проблема, в которой по умолчанию clang не ищет /usr и /usr/local. Потрясающе, правда?

Исправление для этого — запустить xcode-select --install (см. вопрос SO "На Mac g++ (clang) не выполняет поиск /usr/local/include и /usr/local/lib по умолчанию").

Кроме того, если вам нужно посмотреть и попытаться выяснить, какие пути поиска использует clang, вы можете вызвать:

  • clang -x c -v -E /dev/null чтобы получить включаемые пути
  • clang -Xlinker -v чтобы получить пути компоновщика

(Из сообщения в блоге: "OS X clang include путь поиска библиотеки.")

person Weston C    schedule 21.10.2016
comment
Прочитав это, я решил аналогичную проблему на Mac, используя ln -s /usr/local/include /usr/include. - person Keith John Hutchison; 27.04.2020