代码改变世界

libxml2:Debug模式可以编译,Distribution下不可以?

2011-05-06 17:13  乱世文章  阅读(358)  评论(0编辑  收藏  举报

 

在Project中使用了libxml2,已将 ${SDKROOT}/usr/include/libxml2加入到Header Search Path中,在Debug模式下编译运行OK,但切换到Distribution模式下居然不行?

错误全是头文件找不到: libxml/tree.h no such file or directory

共有120个这样的错误。 查了网上的答案,都是说Header Search Path设置的路径不对。

但我明明设置了呀?

最后http://stackoverflow.com/questions/1140341/dylib-linked-in-debug-not-found-for-release-for-iphone-in-xcode 提醒了我:

An error on the .h is a compile-time error with your Header Search Paths, not a .dylib or a linker error. You have to ensure that /usr/include/libxml2 is in your Header Search Paths in your Release configuration.

Debug中的配置是设置了,但Distribution的配置呢?

赶紧去Distribution中查看配置,但很不幸,Header Search Path中是设置对的。

那是哪里的问题呢?突然看到错误报告的数目,才120个,好像有点不对?

把Header Search Path删除,重新Build,果然,如果不设置Header Search Path的话,编译错误整整有8000多条!

是什么原因导致了Header Search Path“部分有效”呢?

一定还有其它配置文件的Header Search Path。

由于这个Project使用了另外一个静态库(那个静态库也引用了libxml2库),那么静态库的Distribution配置对了吗? 赶紧去静态库Project中查看Distribution配置,果然有问题: Header Search Path未设置,C/C++ Compiler Version未设置为LLVM GCC4.2。

原来在调试静态库时,只设置了Debug配置,这样凡是引用这个静态库的其他Project,在Debug模式下编译不会有问题,因为静态库的Debug配置是正确的。但如果用其他配置如Release或Distritution进行编译,则会导致前面的问题发生,因为静态库的Release/Distribution尚未配置。

这个教训很深刻,希望对其他人也有帮助。