gpt4 book ai didi

将基于 gnulib 的项目交叉编译到 MinGW

转载 作者:太空狗 更新时间:2023-10-29 17:12:45 30 4
gpt4 key购买 nike

我正在尝试交叉编译这个 project给 MinGW。

该项目使用 autotools 作为构建系统,并依赖于 libcurl , CUnit , Jansson和一些 gnulib 模块。

我为 x86_64-w64-mingw32 编译了所有依赖项并安装在 /home/user/mingw64

我跑:

$ gnulib-tool --update
$ autoreconf -fi
$ CURL_CFLAGS="-I/home/user/mingw64/usr/local/include" \
CURL_LIBS="-L/home/user/mingw64/usr/local/lib -lcurl" \
JANSSON_CFLAGS="-I/home/user/mingw64/usr/local/include" \
JANSSON_LIBS="-L/home/user/mingw64/usr/local/lib -ljansson" \
CUNIT_CFLAGS="-I/home/user/mingw64/usr/local/include" \
CUNIT_LIBS="-L/home/user/mingw64/usr/local/lib -lcunit" \
./configure --host=x86_64-w64-mingw32
$ make

我得到这个错误:

make  all-recursive
make[1]: Entering directory '/home/user/projects/shill'
Making all in po
make[2]: Entering directory '/home/user/projects/shill/po'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/user/projects/shill/po'
Making all in lib
make[2]: Entering directory '/home/user/projects/shill/lib'
make[2]: *** No rule to make target 'lib/errno.h', needed by 'all'. Stop.
make[2]: Leaving directory '/home/user/projects/shill/lib'
Makefile:1897: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/user/projects/shill'
Makefile:1429: recipe for target 'all' failed
make: *** [all] Error 2

errno.h 是 gnulib 模块的一部分。所以我认为问题出在 Makefile.am 中的这一部分。 :

# Find gnulib headers.
ACLOCAL_AMFLAGS = -I m4

AM_CPPFLAGS = \
-DLOCALEDIR='"$(localedir)"' \
-Ilib -I$(top_srcdir)/lib \
-Isrc -I$(top_srcdir)/src \

但我想不出解决办法。我完全按照 gnulib manual 中描述的说明进行操作。 .

最佳答案

我设法找到了解决此问题的方法。显然 autotools 并不像我想象的那么简单。

  1. 我必须重新生成 gnulib 模块,这次指定--makefile-name 参数。即。

    $ gnulib-tool ... --makefile-name=gnulib.mk ...
  2. 我从 configure.ac 中的 automake 生成的文件中删除了 lib/Makefile。所以不是:

    dnl Put automake generated files results here
    AC_CONFIG_FILES([Makefile
    po/Makefile.in
    lib/Makefile])

    现在我有:

    dnl Put automake generated files results here
    AC_CONFIG_FILES([Makefile
    po/Makefile.in])
  3. 我从 Makefile.am 中的 SUBDIRS 中删除了 lib。 IE。而不是:

    # Subdirectories to descend into.
    SUBDIRS = po lib

    我有:

    # Subdirectories to descend into.
    SUBDIRS = po
  4. 我在 lib 目录中创建了一个名为 local.mk 的新文件,内容如下:

    include lib/gnulib.mk

    # Allow "make distdir" to succeed before "make all" has run.
    dist-hook: $(noinst_LIBRARIES)
    .PHONY: dist-hook
  5. 并将其包含在 Makefile.am 中。

    include $(top_srcdir)/lib/local.mk
  6. 最后我不得不运行这个命令:

    $ ./build-aux/prefix-gnulib-mk --lib-name=libshill lib/gnulib.mk

就是这样。

关于将基于 gnulib 的项目交叉编译到 MinGW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870949/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com