所以我试图在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'
。它似乎知道在哪里看,文件在那个位置,但有些东西看不到它们。
答案 0 :(得分:1)
阅读lib/odbc/configure.in
,这似乎是一个错误。看起来sql.h
和sqlext.h
(line 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
获取链接器路径