我有一套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输出复制并粘贴它),那么它编译得很好没有错误。
我在链接阶段遇到完全相同的问题,它在libxml2.a
给gcc的路径中找不到-L/mingw32/lib
库,我再次运行gcc link命令直接来自shell,它工作正常。
那么为什么gcc的-I/mingw32/include/libxml2
和-L/mingw32/lib
选项在通过mingw32-make
运行时不起作用,但完全相同的选项可以直接从shell调用gcc?
我确实尝试将路径显式化为Windows路径(d:/msys64/mingw32/...
)并尝试引用它们,但无济于事。
答案 0 :(得分:0)
原来,答案是使用显式的Windows路径,正如我上面所说的那样,我已经尝试了,但是当我再次尝试时它起作用,所以我之前必须犯这样的错误。我通过使用pkg-config的输出找到了这个,它给出了:
[csv-gen]: pkg-config --cflags libxml-2.0
-ID:/msys64/mingw32/include/libxml2
显然问题是mingw32-make并不完全理解msys文件系统,或者至少没有/ mingw32和/ mingw64路径。