【问题标题】:How can I specify include and library locations for mingw32-make under msys2?如何在 msys2 下为 mingw32-make 指定包含和库位置?
【发布时间】: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/...),并尝试引用它们,但无济于事。

【问题讨论】:

    标签: gcc mingw32 msys2


    【解决方案1】:

    事实证明,答案是使用显式 Windows 路径,正如我上面所说的,我已经尝试过,但是当我再次尝试时,它起作用了,所以我之前一定犯了一些错误。我通过使用 pkg-config 的输出发现了这一点:

    [csv-gen]: pkg-config --cflags libxml-2.0
    -ID:/msys64/mingw32/include/libxml2
    

    显然问题在于 mingw32-make 不完全了解 msys 文件系统,或者至少不了解其中的 /mingw32 和 /mingw64 路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2012-03-17
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      相关资源
      最近更新 更多