2016-08-30 11 views
1

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

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

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

odbc   : ODBC library - header check failed 

Я пошел искать любую информацию, которую я мог найти о библиотеках ODBC на OS X, и нашел an earlier question/answer которые отметили «Поскольку 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/местные/включить содержит 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 и строках и нашел old message, в котором говорится, что было время, когда процесс настройки не распознал запросы iodbc в OS X ... но быстрая проверка lib/odbc/configure.in под директором источника erlang кажется, чтобы показать исправление, предложенное в этом сообщении, было сложено, и это больше не должно быть проблемой.

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

Не удалось - можно каким-то образом отладить/изменить процесс настройки?

Редактировать

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

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

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

+0

Как вы пытаетесь построить? Керл отлично работает для меня. –

+1

Каковы сообщения об ошибках в 'lib/odbc/config.log'? – legoscia

+1

Вы можете попробовать установить [предварительно скомпилированный iODBC 3.52.12 для OS X] (http://opldownload.s3.amazonaws.com/uda/components/7.0/universal-apple-macosx10.7-32/mxkozzzz.dmg), который предоставляет вам все заголовки, полную поддержку графических интерфейсов, полную поддержку 64-разрядных и 32-разрядных версий и т. д., и ставит все, где OS X ожидает их найти. (ObDisclaimer: [Мой работодатель] (http://www.openlinksw.com/) поддерживает и поддерживает [iODBC] (http://www.iodbc.org/).) – TallTed

ответ

1

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

+0

Я пытаюсь понять это достаточно хорошо, чтобы подать отчет об ошибке; Я думаю, что я вижу проверку этого пути на [строки 150-158] (https://github.com/erlang/otp/blob/OTP-19.0/lib/odbc/configure.in#L150)? Но я не знаю, что это означает, что это после строк, на которые вы ссылались. И мне также интересно, есть ли способ проверить значения '$ host_os' и' $ with_odbc' (я попробовал добавить 'echo> & 1" blerg: $ with_odbc "' to configure.in, но это не похоже производить что угодно). –

+0

Да, эти строки задают путь включения в соответствии с настройкой, но это происходит после того, как переменная 'odbc_required_headers' была установлена ​​на' no', что заставляет configure терпеть неудачу. После изменения 'configure.in', вы запустили' ./otp_build autoconf' в каталоге верхнего уровня? – legoscia

0

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

Исправление для этого должно быть выполнено xcode-select --install (см. Вопрос SO "On mac, g++ (clang) fails to search /usr/local/include and /usr/local/lib by default").

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

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

(Из записи в блоге: "OS X clang include lib search path.")