2

所以我试图在 OS X 10.9 Mavericks 上构建 Erlang/OTP 18.3,并且似乎遇到了找不到 odbc 库/头文件的问题。

第一次尝试跑步时,configure我收到了以下消息:

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

odbc           : ODBC library - header check failed

我去寻找有关 OS X 上的 ODBC 库的任何信息,并找到了一个较早的问题/答案,其中指出“自从 OS X 10.9 (Mavericks) Apple 停止包含 iODBC SQL 头文件”,这表明这可能是关键问题.

所以我从 iodbc.org 获取了 libiodbc,构建了 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 和构建的任何早期讨论,并发现一条旧消息表明配置过程有时无法识别 OS X 上的 iodbc 搜索......但快速检查erlang 源代码目录下的 lib/odbc/configure.in似乎显示了该消息中建议的补丁已折叠,这应该不再是问题。

我错过了什么?有没有另一种方法来告诉配置它应该在哪里寻找 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标题下,它还指定它 know ODBC_INCLUDE='-I/usr/local/include'。它似乎知道在哪里看,文件在那个位置,但有些东西看不到它们。

4

2 回答 2

1

在研究了这个问题一段时间后,试图提出更好的问题或为 Erlang 维护人员创建一个好的错误报告......我发现这根本不是 Erlang 源代码分发的问题,而是一个问题默认情况下,clang 不搜索 /usr 和 /usr/local。太棒了,对吧?

解决此问题的方法是运行xcode-select --install(请参阅 SO 问题“在 Mac 上,g++ (clang) failed to search /usr/local/include and /usr/local/lib by default”)。

此外,如果您需要查看并尝试找出 clang 正在使用的搜索路径,您可以调用:

  • clang -x c -v -E /dev/null获取包含路径
  • clang -Xlinker -v获取链接器路径

(来自博客文章:“OS X clang 包含 lib 搜索路径。”

于 2016-10-21T20:13:21.850 回答
1

阅读lib/odbc/configure.in,这似乎是一个错误。看起来检查sql.hand sqlext.h(在第 120 行)没有考虑到指定的路径--with-odbc。我建议在https://bugs.erlang.org/上报告这一点。

于 2016-09-12T09:48:12.413 回答