在OS X上构建OTP 18.3 10.9“ODBC库 - 标头检查失败”

时间:2016-08-30 20:37:56

标签: macos erlang odbc configure iodbc

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

我第一次尝试运行configure时收到了消息:

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

odbc           : ODBC library - header check failed

我去寻找有关OS X上的ODBC库的任何信息,并发现an earlier question/answer注意到“自从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,所以它绝对好像 标题应该是可发现的。

我四处寻找有关odbc和build的erlang-questions邮件列表的任何早期讨论,并发现old message表明配置过程无法识别OS X上的iodbc搜索。 ..但是在erlang源代码下快速检查lib / odbc / configure.in似乎以显示该消息中建议的补丁已被折叠,这应该不再是问题。

我错过了什么?还有另一种方法来告诉configure它在哪里 应该寻找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 / local / include是否包含这些文件。我正在使用--with-odbc=/usr/local。后来在config.log中,在Output Variables标题下,它还指定它知道ODBC_INCLUDE='-I/usr/local/include'。它似乎知道在哪里看,文件在那个位置,但有些东西看不到它们。

2 个答案:

答案 0 :(得分:1)

阅读lib/odbc/configure.in,这似乎是一个错误。看起来sql.hsqlext.hline 120上)的检查不会考虑--with-odbc中指定的路径。我建议在https://bugs.erlang.org/报告此事。

答案 1 :(得分:0)

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

解决此问题的方法是运行xcode-select --install(参见问题"On mac, g++ (clang) fails 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 include lib search path."