【发布时间】:2017-03-20 06:43:46
【问题描述】:
我有一套 Windows 程序,到目前为止我已经在 msys 下构建,其中一个使用 libxml2。我目前正在尝试切换到在msys2 下构建它们,而后者遇到了问题。我更新的Makefile 包括:
CFLAGS += -I/mingw32/include/libxml2
$(BINDIR)/%.o: %.c
@-$(MKDIR) $(BINDIR)
$(CC) $(CFLAGS) -c $*.c -o $@
但是当我运行make (mingw32-make) 时,编译失败如下:
[csv-gen]: mingw32-make
gcc -std=c99 -Werror -Wall -D_XOPEN_SOURCE -O -I/mingw32/include/libxml2 -c xmlParse.c -o ../../bin/Win32/csv-gen/xmlParse.o
xmlParse.c:36:27: fatal error: libxml/parser.h: No such file or directory
#include "libxml/parser.h"
^
compilation terminated.
Makefile:66: recipe for target '../../bin/Win32/csv-gen/xmlParse.o' failed
mingw32-make: *** [../../bin/Win32/csv-gen/xmlParse.o] Error 1
然而,libxml/parser.h 文件确实存在于 -I 选项给出的 /mingw32/include/libxml2 路径下:
[csv-gen]: ls /mingw32/include/libxml2/libxml/parser.h
/mingw32/include/libxml2/libxml/parser.h
奇怪的是,如果我直接从 msys bash shell 运行完全相同的 gcc 命令(从上面的 make 输出中复制并粘贴它),那么它编译得很好,没有错误。
我在链接阶段遇到了完全相同的问题,它在-L/mingw32/lib 提供给 gcc 的路径中找不到 libxml2.a 库,我再次直接从 shell 运行 gcc 链接命令,它工作正常。
那么为什么 gcc 的 -I/mingw32/include/libxml2 和 -L/mingw32/lib 选项在通过 mingw32-make 运行时不起作用,而完全相同的选项在直接从 shell 调用 gcc 时可以正常工作?
我确实尝试将路径设为显式 Windows 路径 (d:/msys64/mingw32/...),并尝试引用它们,但无济于事。
【问题讨论】: