【问题标题】:GCC errors when trying to compile checkinstall on Cygwin尝试在 Cygwin 上编译 checkinstall 时出现 GCC 错误
【发布时间】:2018-02-08 05:59:08
【问题描述】:

我在 Windows 7 上运行 Cygwin。尝试从源代码安装 checkinstall 实用程序时遇到问题,罪魁祸首似乎是 gcc

当我运行/.configure 时,我得到了错误:

-bash: ./configure: No such file or directory

所以我继续使用make,得到的输出失败并出现很多错误,可能是由gcc 引起的。 output can be seen in its entirety here,但下面是它的第一行和最后几行。

$ make
    for file in locale/checkinstall-*.po ; do \
            case ${file} in \
                    locale/checkinstall-template.po)  ;; \
                    *) \
                            out=`echo $file | sed -s 's/po/mo/'` ; \
                            msgfmt -o ${out} ${file} ; \
                            if [ $? != 0 ] ; then \
                                    exit 1 ; \
                            fi ; \
                    ;; \
            esac ; \
    done
    make -C installwatch
    make[1]: Entering directory '/cygdrive/b/Users/Me/Desktop/checkinstall-1.6.2/installwatch'
    gcc -Wall -c -D_GNU_SOURCE -DPIC -fPIC -D_REENTRANT -DVERSION=\"0.7.0beta7\" installwatch.c
   In file included from /usr/local/include/sys/param.h:33:0,
                    from installwatch.c:31:
   /usr/local/include/sys/types.h:10:2: error: #error Only Win32 target is supported!
    #error Only Win32 target is supported!
     ^~~~~
   In file included from /usr/local/include/sys/param.h:33:0,
                    from installwatch.c:31:
   /usr/local/include/sys/types.h:90:3: error: unknown type name ‘time_t’
      time_t  tv_sec; /* Seconds */
      ^~~~~~
   In file included from installwatch.c:33:0:
   /usr/local/include/sys/stat.h:10:2: error: #error Only Win32 target is supported!
    #error Only Win32 target is supported!
     ^~~~~
   In file included from /usr/local/include/sys/stat.h:14:0,
                    from installwatch.c:33:
   /usr/local/include/io.h:199:28: error: expected ‘,’ or ‘;’ before ‘_findfirst32’
      _CRTIMP intptr_t __cdecl _findfirst32(const char *_Filename,struct _finddata32_t *_FindData);
                               ^~~~~~~~~~~~ 


  ...           


    installwatch.c: In function ‘fopen’:
   installwatch.c:2560:51: error: expected ‘)’ before ‘result’
      logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
                                                       ^~~~~~
    installwatch.c:2560:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
       logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
            ^~~
    installwatch.c:2560:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
    installwatch.c:2575:51: error: expected ‘)’ before ‘result’
       logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
                                                       ^~~~~~
    installwatch.c:2575:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
       logg("%" PRIdPTR "\tfopen\t%s\t#%s\n",(intptr_t)result,
            ^~~
    installwatch.c:2575:8: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
    installwatch.c: At top level:
    installwatch.c:2600:7: error: conflicting types for ‘getcwd’
     char *getcwd(char *buffer,size_t size) {
           ^~~~~~
    In file included from /usr/local/include/sys/stat.h:14:0,
                     from installwatch.c:33:
    /usr/local/include/io.h:279:17: note: previous declaration of ‘getcwd’ was here
       char *__cdecl getcwd (char *, int) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
                     ^~~~~~
    installwatch.c:2664:30: error: unknown type name ‘uid_t’
     int lchown(const char *path, uid_t owner, gid_t group) {
                                  ^~~~~
    installwatch.c:2664:43: error: unknown type name ‘gid_t’
     int lchown(const char *path, uid_t owner, gid_t group) {
                                               ^~~~~
    installwatch.c:2749:5: error: conflicting types for ‘mkdir’
     int mkdir(const char *pathname, mode_t mode) {
         ^~~~~
    In file included from /usr/local/include/sys/stat.h:14:0,
                     from installwatch.c:33:
    /usr/local/include/io.h:280:15: note: previous declaration of ‘mkdir’ was here
       int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
                   ^~~~~
    installwatch.c:2983:7: error: conflicting types for ‘realpath’
     char *realpath(const char *file_name,char *resolved_name) {
           ^~~~~~~~
    installwatch.c:556:6: note: previous implicit declaration of ‘realpath’ was here
      if(!realpath(path,resolved_path)) {
          ^~~~~~~~
    installwatch.c:3309:5: error: conflicting types for ‘utime’
     int utime (const char *pathname, const struct utimbuf *newtimes) {
         ^~~~~
    In file included from /usr/local/include/utime.h:6:0,
                     from installwatch.c:47:
    /usr/local/include/sys/utime.h:115:26: note: previous definition of ‘utime’ was here
     __CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
                              ^~~~~
    installwatch.c: In function ‘true_stat’:
    installwatch.c:153:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
    installwatch.c: In function ‘true_lstat’:
    installwatch.c:161:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
    installwatch.c: In function ‘true_mknod’:
    installwatch.c:157:1: warning: control reaches end of non-void function [-Wreturn-type]
     }
     ^
    In file included from installwatch.c:35:0:
    installwatch.c: In function ‘open’:
    installwatch.c:2842:20: warning: ‘mode_t {aka short unsigned int}’ is promoted to ‘int’ when passed through ‘...’
      mode = va_arg(ap, mode_t);
                        ^
    installwatch.c:2842:20: note: (so you should pass ‘int’ not ‘mode_t {aka short unsigned int}’ to ‘va_arg’)
    installwatch.c:2842:20: note: if this code is reached, the program will abort
    At top level:
    installwatch.c:1040:12: warning: ‘__instw_printdirent64’ defined but not used [-Wunused-function]
     static int __instw_printdirent64(struct dirent64 *entry) {
                ^~~~~~~~~~~~~~~~~~~~~
    make[1]: *** [Makefile:22: installwatch.o] Error 1
    make[1]: Leaving directory '/cygdrive/b/Users/Me/Desktop/checkinstall-1.6.2/installwatch'
    make: *** [Makefile:11: all] Error 2

如果我以错误的方式处理此问题,我提前表示歉意,但我完全无法理解这段代码和引发的错误。我已经尝试使用 Cygwin 安装程序重新安装 gcc_core 和其他 gcc 软件包几次,但没有效果。

我正在使用this guide从源代码编译最新版本的gcc,然后我也遇到了致命错误,并决定从头开始,确定问题是否可以在没有的情况下解决为我的 Cygwin 安装增加了更多的臃肿。提前感谢,非常感谢。

【问题讨论】:

  • 我在上面没有看到任何表明 gcc 存在问题的内容。 gcc 正在报告它在尝试编译和构建实用程序时遇到的错误。它应该附带有关如何编译的说明。如果要运行 configure 脚本,请先找到它。 bash 告诉你它找不到它。 #error 的其余部分似乎向我表明您只能在本机 Windows(而不是 Cygwin)上编译它,但我不确定。如果它没有附带编译说明,联系作者应该会有所帮助。
  • stackoverflow.com/questions/18703526/… 并尝试使用 autoconf checkinstall.in 而不是 configure
  • 因为包没有使用 autoconf/automake 当然 configure 和 company 不见了。
  • @gj13 那么我将如何解决该问题中列出的问题?
  • 您的types.h 安装在/usr/local/ 中,它来自哪个包?这可能就是为什么安装gcc 和其他没有效果的原因。它将首先使用来自/usr/local/ 的那个,这可能不是它应该使用的那个。

标签: c bash gcc cygwin


【解决方案1】:

checkinstall 应用似乎未配置为在 cygwin 上运行。它针对几个特定的​​ Linux 发行系列进行了配置,并具有通用的源版本。

我已经下载并解压了checkinstall-1.6.2.tar.gz 文件;它扩展到checkinstall-1.6.2 目录。在那里你可以找到checkinstall shell 脚本。我没有时间浏览几千行 shell 代码。它似乎需要您构建和安装installwatch 程序,我猜它会注册一个文件更改处理程序,以识别所有新的和更改的文件和目录。我怀疑处理程序需要更改才能在 cygwin 中正常工作。您可能会成功发布到Cygwin mailing lists 之一。

HTH

道格

【讨论】:

  • 我昨天总结了这个,在我花了几个小时将我的 Cygwin 安装剥离到最低限度之后,然后一次重建一个文件,直到我能够从 @ 获得最少数量的错误987654328@。留下的错误仍然足够致命,以至于我别无选择,只能得出结论 checkinstall 不是要从源代码构建的,或者不是为 Cygwin 构建的。
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
相关资源
最近更新 更多