LINUX.ORG.RU

Не собираются пакеты в Cygwin | ошибка: несовместимые типы

 ,


0

1

При попытке собрать любой пакет, выдается одна и та же ошибка: несовместимые типы.

Вот вывод make для пакета mlt:

$ make
list='src/framework src/mlt++ src/melt src/modules src/swig profiles'; \
for subdir in $list; do \
	make -s -C $subdir depend || exit 1; \
	make -C $subdir all || exit 1; \
done
make[1]: вход в каталог «/home/Тарик/kdenlive/mlt/src/framework»
cc -DARCH_X86_64 -Wall -DPIC   -O2 -pipe -fno-tree-dominator-opts -fno-tree-pre -DUSE_MMX -DUSE_SSE -DUSE_SSE2 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE  -DPREFIX_DATA="\"/usr/local/share/mlt\"" -DPREFIX_LIB="\"/usr/local/lib/mlt\""   -c -o mlt_property.o mlt_property.c
In file included from /usr/include/stdlib.h:30:0,
                 from mlt_property.c:32:
/usr/include/sys/_locale.h:10:28: ошибка: несовместимые типы для «locale_t»
 typedef struct __locale_t *locale_t;
                            ^
In file included from mlt_property.c:28:0:
mlt_property.h:36:15: замечание: здесь была предыдущая декларация «locale_t»
 typedef char* locale_t;
               ^
mlt_property.c: В функции «time_clock_to_frames»:
mlt_property.c:292:26: предупреждение: в передаче аргумента 2 «setlocale»: несовместимый тип указателя [-Wincompatible-pointer-types]
   setlocale( LC_NUMERIC, locale );
                          ^
In file included from /usr/include/stdio.h:29:0,
                 from mlt_property.c:31:
/usr/include/locale.h:82:7: замечание: expected «const char *» but argument is of type «locale_t {aka struct __locale_t *}»
 char *_EXFUN(setlocale,(int, const char *));
       ^
mlt_property.c: На верхнем уровне:
mlt_property.c:446:5: ошибка: несовместимые типы для «mlt_property_get_int»
 int mlt_property_get_int( mlt_property self, double fps, locale_t locale )
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:46:12: замечание: здесь была предыдущая декларация «mlt_property_get_int»
 extern int mlt_property_get_int( mlt_property self, double fps, locale_t );
            ^
mlt_property.c: В функции «mlt_property_atof»:
mlt_property.c:506:27: предупреждение: в передаче аргумента 2 «setlocale»: несовместимый тип указателя [-Wincompatible-pointer-types]
    setlocale( LC_NUMERIC, locale );
                           ^
In file included from /usr/include/stdio.h:29:0,
                 from mlt_property.c:31:
/usr/include/locale.h:82:7: замечание: expected «const char *» but argument is of type «locale_t {aka struct __locale_t *}»
 char *_EXFUN(setlocale,(int, const char *));
       ^
mlt_property.c: На верхнем уровне:
mlt_property.c:536:8: ошибка: несовместимые типы для «mlt_property_get_double»
 double mlt_property_get_double( mlt_property self, double fps, locale_t locale )
        ^
In file included from mlt_property.c:28:0:
mlt_property.h:47:15: замечание: здесь была предыдущая декларация «mlt_property_get_double»
 extern double mlt_property_get_double( mlt_property self, double fps, locale_t );
               ^
mlt_property.c:563:14: ошибка: несовместимые типы для «mlt_property_get_position»
 mlt_position mlt_property_get_position( mlt_property self, double fps, locale_t locale )
              ^
In file included from mlt_property.c:28:0:
mlt_property.h:48:21: замечание: здесь была предыдущая декларация «mlt_property_get_position»
 extern mlt_position mlt_property_get_position( mlt_property self, double fps, locale_t );
                     ^
mlt_property.c:687:7: ошибка: несовместимые типы для «mlt_property_get_string_l»
 char *mlt_property_get_string_l( mlt_property self, locale_t locale )
       ^
In file included from mlt_property.c:28:0:
mlt_property.h:51:14: замечание: здесь была предыдущая декларация «mlt_property_get_string_l»
 extern char *mlt_property_get_string_l( mlt_property self, locale_t );
              ^
mlt_property.c: В функции «mlt_property_get_string_l»:
mlt_property.c:704:28: предупреждение: несовместимый тип указателя в инициализации [-Wincompatible-pointer-types]
   const char *localename = locale;
                            ^
mlt_property.c: На верхнем уровне:
mlt_property.c:918:7: ошибка: несовместимые типы для «mlt_property_get_time»
 char *mlt_property_get_time( mlt_property self, mlt_time_format format, double fps, locale_t locale )
       ^
In file included from mlt_property.c:28:0:
mlt_property.h:55:14: замечание: здесь была предыдущая декларация «mlt_property_get_time»
 extern char *mlt_property_get_time( mlt_property self, mlt_time_format, double fps, locale_t );
              ^
mlt_property.c: В функции «mlt_property_get_time»:
mlt_property.c:943:28: предупреждение: несовместимый тип указателя в инициализации [-Wincompatible-pointer-types]
   const char *localename = locale;
                            ^
mlt_property.c: В функции «is_property_numeric»:
mlt_property.c:1050:27: предупреждение: в передаче аргумента 2 «setlocale»: несовместимый тип указателя [-Wincompatible-pointer-types]
    setlocale( LC_NUMERIC, locale );
                           ^
In file included from /usr/include/stdio.h:29:0,
                 from mlt_property.c:31:
/usr/include/locale.h:82:7: замечание: expected «const char *» but argument is of type «locale_t {aka struct __locale_t *}»
 char *_EXFUN(setlocale,(int, const char *));
       ^
mlt_property.c:1033:10: предупреждение: variable «temp» set but not used [-Wunused-but-set-variable]
   double temp;
          ^
mlt_property.c: На верхнем уровне:
mlt_property.c:1111:5: ошибка: несовместимые типы для «mlt_property_interpolate»
 int mlt_property_interpolate( mlt_property self, mlt_property p[],
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:57:12: замечание: здесь была предыдущая декларация «mlt_property_interpolate»
 extern int mlt_property_interpolate( mlt_property self, mlt_property points[], double progress, double fps, locale_t locale, mlt_keyframe_type interp );
            ^
mlt_property.c: В функции «mlt_property_interpolate»:
mlt_property.c:1125:52: предупреждение: в передаче аргумента 2 «mlt_property_get_rect»: несовместимый тип указателя [-Wincompatible-pointer-types]
     points[0] = p[1]? mlt_property_get_rect( p[1], locale ) : zero;
                                                    ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c:1128:47: предупреждение: в передаче аргумента 2 «mlt_property_get_rect»: несовместимый тип указателя [-Wincompatible-pointer-types]
      points[1] = mlt_property_get_rect( p[2], locale );
                                               ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c:1144:52: предупреждение: в передаче аргумента 2 «mlt_property_get_rect»: несовместимый тип указателя [-Wincompatible-pointer-types]
     points[1] = p[1]? mlt_property_get_rect( p[1], locale ) : zero;
                                                    ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c:1147:53: предупреждение: в передаче аргумента 2 «mlt_property_get_rect»: несовместимый тип указателя [-Wincompatible-pointer-types]
      points[0] = p[0]? mlt_property_get_rect( p[0], locale ) : zero;
                                                     ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c:1148:53: предупреждение: в передаче аргумента 2 «mlt_property_get_rect»: несовместимый тип указателя [-Wincompatible-pointer-types]
      points[2] = p[2]? mlt_property_get_rect( p[2], locale ) : zero;
                                                     ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c:1149:53: предупреждение: в передаче аргумента 2 «mlt_property_get_rect»: несовместимый тип указателя [-Wincompatible-pointer-types]
      points[3] = p[3]? mlt_property_get_rect( p[3], locale ) : zero;
                                                     ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c: В функции «refresh_animation»:
mlt_property.c:1209:74: предупреждение: в передаче аргумента 5 «mlt_animation_parse»: несовместимый тип указателя [-Wincompatible-pointer-types]
    mlt_animation_parse( self->animation, self->prop_string, length, fps, locale );
                                                                          ^
In file included from mlt_property.c:29:0:
mlt_animation.h:41:12: замечание: expected «locale_t {aka char *}» but argument is of type «locale_t {aka struct __locale_t *}»
 extern int mlt_animation_parse(mlt_animation self, const char *data, int length, double fps, locale_t locale );
            ^
mlt_property.c: На верхнем уровне:
mlt_property.c:1237:8: ошибка: несовместимые типы для «mlt_property_anim_get_double»
 double mlt_property_anim_get_double( mlt_property self, double fps, locale_t locale, int position, int length )
        ^
In file included from mlt_property.c:28:0:
mlt_property.h:58:15: замечание: здесь была предыдущая декларация «mlt_property_anim_get_double»
 extern double mlt_property_anim_get_double( mlt_property self, double fps, locale_t locale, int position, int length );
               ^
mlt_property.c:1272:5: ошибка: несовместимые типы для «mlt_property_anim_get_int»
 int mlt_property_anim_get_int( mlt_property self, double fps, locale_t locale, int position, int length )
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:59:12: замечание: здесь была предыдущая декларация «mlt_property_anim_get_int»
 extern int mlt_property_anim_get_int( mlt_property self, double fps, locale_t locale, int position, int length );
            ^
mlt_property.c:1307:7: ошибка: несовместимые типы для «mlt_property_anim_get_string»
 char* mlt_property_anim_get_string( mlt_property self, double fps, locale_t locale, int position, int length )
       ^
In file included from mlt_property.c:28:0:
mlt_property.h:60:14: замечание: здесь была предыдущая декларация «mlt_property_anim_get_string»
 extern char* mlt_property_anim_get_string( mlt_property self, double fps, locale_t locale, int position, int length );
              ^
mlt_property.c:1355:5: ошибка: несовместимые типы для «mlt_property_anim_set_double»
 int mlt_property_anim_set_double( mlt_property self, double value, double fps, locale_t locale,
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:61:12: замечание: здесь была предыдущая декларация «mlt_property_anim_set_double»
 extern int mlt_property_anim_set_double( mlt_property self, double value, double fps, locale_t locale, int position, int length, mlt_keyframe_type keyframe_type );
            ^
mlt_property.c:1390:5: ошибка: несовместимые типы для «mlt_property_anim_set_int»
 int mlt_property_anim_set_int( mlt_property self, int value, double fps, locale_t locale,
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:62:12: замечание: здесь была предыдущая декларация «mlt_property_anim_set_int»
 extern int mlt_property_anim_set_int( mlt_property self, int value, double fps, locale_t locale, int position, int length, mlt_keyframe_type keyframe_type );
            ^
mlt_property.c:1427:5: ошибка: несовместимые типы для «mlt_property_anim_set_string»
 int mlt_property_anim_set_string( mlt_property self, const char *value, double fps, locale_t locale, int position, int length )
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:63:12: замечание: здесь была предыдущая декларация «mlt_property_anim_set_string»
 extern int mlt_property_anim_set_string( mlt_property self, const char *value, double fps, locale_t locale, int position, int length );
            ^
mlt_property.c:1521:10: ошибка: несовместимые типы для «mlt_property_get_rect»
 mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale )
          ^
In file included from mlt_property.c:28:0:
mlt_property.h:67:17: замечание: здесь была предыдущая декларация «mlt_property_get_rect»
 extern mlt_rect mlt_property_get_rect( mlt_property self, locale_t locale );
                 ^
mlt_property.c: В функции «mlt_property_get_rect»:
mlt_property.c:1550:27: предупреждение: в передаче аргумента 2 «setlocale»: несовместимый тип указателя [-Wincompatible-pointer-types]
    setlocale( LC_NUMERIC, locale );
                           ^
In file included from /usr/include/stdio.h:29:0,
                 from mlt_property.c:31:
/usr/include/locale.h:82:7: замечание: expected «const char *» but argument is of type «locale_t {aka struct __locale_t *}»
 char *_EXFUN(setlocale,(int, const char *));
       ^
mlt_property.c: На верхнем уровне:
mlt_property.c:1618:5: ошибка: несовместимые типы для «mlt_property_anim_set_rect»
 int mlt_property_anim_set_rect( mlt_property self, mlt_rect value, double fps, locale_t locale,
     ^
In file included from mlt_property.c:28:0:
mlt_property.h:68:12: замечание: здесь была предыдущая декларация «mlt_property_anim_set_rect»
 extern int mlt_property_anim_set_rect( mlt_property self, mlt_rect value, double fps, locale_t locale, int position, int length, mlt_keyframe_type keyframe_type );
            ^
mlt_property.c:1651:10: ошибка: несовместимые типы для «mlt_property_anim_get_rect»
 mlt_rect mlt_property_anim_get_rect( mlt_property self, double fps, locale_t locale, int position, int length )
          ^
In file included from mlt_property.c:28:0:
mlt_property.h:69:17: замечание: здесь была предыдущая декларация «mlt_property_anim_get_rect»
 extern mlt_rect mlt_property_anim_get_rect( mlt_property self, double fps, locale_t locale, int position, int length );
                 ^
make[1]: *** [<встроенное>: mlt_property.o] Ошибка 1
make[1]: выход из каталога «/home/Тарик/kdenlive/mlt/src/framework»
make: *** [Makefile:9: all] Ошибка 1

Версий не указано, значит, не исключено, что эту ошибку уже исправили.

gag ★★★★★
()
Ответ на: комментарий от Rododendron
make[1]: вход в каталог «/home/Тарик/kdenlive/mlt/src/framework»
cc -DARCH_X86_64 -Wall -DPIC   -O2 -pipe -fno-tree-dominator-opts -fno-tree-pre -DUSE_MMX -DUSE_SSE -DUSE_SSE2 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE  -DPREFIX_DATA="\"/usr/local/share/mlt\"" -DPREFIX_LIB="\"/usr/local/lib/mlt\""   -c -o mlt_property.o mlt_property.c
In file included from /usr/include/stdlib.h:30:0,
                 from mlt_property.c:32:
/usr/include/sys/_locale.h:10:28: ошибка: несовместимые типы для «locale_t»
 typedef struct __locale_t *locale_t;
                            ^
In file included from mlt_property.c:28:0:
mlt_property.h:36:15: замечание: здесь была предыдущая декларация «locale_t»
 typedef char* locale_t;
               ^

Надо смотреть в mlt_property.h:36 c какой стати там переопределён тип locale_t. Если там какой-то ifndef, искать почему он не нашёл существующее определение locale_t. Если использовались autotools, смотреть там логи на предмет макро этого ifndef. А если там безусловно переопределяется locale_t, тогда к апстриму.

gag ★★★★★
()
Ответ на: комментарий от gag

Не понятно, где брать locale_t. Вот кусок кода в файле mlt_property.h:

#if defined(__GLIBC__) || defined(__APPLE__) || (__FreeBSD_version >= 900506)
#include <xlocale.h>
#else
typedef char* locale_t;
#endif

Файла xlocale.h нет в cygwin. При попытке ему подсунуть local.h, выдает следующее:

make[1]: вход в каталог «/home/Тарик/kdenlive/mlt/src/framework»
cc -DARCH_X86_64 -Wall -DPIC   -O2 -pipe -fno-tree-dominator-opts -fno-tree-pre -DUSE_MMX -DUSE_SSE -DUSE_SSE2 -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE  -DPREFIX_DATA="\"/usr/local/share/mlt\"" -DPREFIX_LIB="\"/usr/local/lib/mlt\""   -c -o mlt_property.o mlt_property.c
mlt_property.c: В функции «time_clock_to_frames»:
mlt_property.c:292:26: предупреждение: в передаче аргумента 2 «setlocale»: несовместимый тип указателя [-Wincompatible-pointer-types]
   setlocale( LC_NUMERIC, locale );

Не думаю, что можно игнорировать это предупреждение.

Но сама ошибка из-за которой не собирается вот:

/usr/src/debug/cygwin-2.7.0-1/winsup/cygwin/lib/libcmain.c:37: undefined reference to `WinMain'
/usr/src/debug/cygwin-2.7.0-1/winsup/cygwin/lib/libcmain.c:37:(.text.startup+0x7f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
make[1]: *** [Makefile:98: libmlt.so.6.5.0] Ошибка 1
make[1]: выход из каталога «/home/Тарик/kdenlive/mlt/src/framework»
make: *** [Makefile:9: all] Ошибка 1

Rododendron
() автор топика
Ответ на: комментарий от Rododendron

xlocale.h из glibc (2.24-9 из Debian):

/* Definition of locale datatype.
   Copyright (C) 1997-2016 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#ifndef _XLOCALE_H
#define _XLOCALE_H      1

/* Structure for reentrant locale using functions.  This is an
   (almost) opaque type for the user level programs.  The file and
   this data structure is not standardized.  Don't rely on it.  It can
   go away without warning.  */
typedef struct __locale_struct
{
  /* Note: LC_ALL is not a valid index into this array.  */
  struct __locale_data *__locales[13]; /* 13 = __LC_LAST. */

  /* To increase the speed of this solution we add some special members.  */
  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;

  /* Note: LC_ALL is not a valid index into this array.  */
  const char *__names[13];
} *__locale_t;

/* POSIX 2008 makes locale_t official.  */
typedef __locale_t locale_t;

#endif /* xlocale.h */

gag ★★★★★
()
Последнее исправление: gag (всего исправлений: 1)
Ответ на: комментарий от gag

В Cygwin исходниках есть:

newlib/libc/include/sys/_locale.h

/* Definition of opaque POSIX-1.2008 type locale_t for userspace. */

#ifndef _SYS__LOCALE_H
#define _SYS__LOCALE_H

#include <newlib.h>
#include <sys/config.h>

struct __locale_t;
typedef struct __locale_t *locale_t;

#endif  /* _SYS__LOCALE_H */

newlib/libc/include/locale.h

/*
        locale.h
        Values appropriate for the formatting of monetary and other
        numberic quantities.
*/

#ifndef _LOCALE_H_
#define _LOCALE_H_

#include "_ansi.h"
#include <sys/cdefs.h>

#define __need_NULL
#include <stddef.h>

#define LC_ALL      0
#define LC_COLLATE  1
#define LC_CTYPE    2
#define LC_MONETARY 3
#define LC_NUMERIC  4
#define LC_TIME     5
#define LC_MESSAGES 6

#if __POSIX_VISIBLE >= 200809 || defined (_COMPILING_NEWLIB)

#include <sys/_locale.h>

[...snip...]

Т.е. всё на месте. А вот исходники mlt надо поправить, дописав ещё одну defined-проверку для детекции Cygwin (с POSIX 2008):

#if defined(__GLIBC__) || defined(__APPLE__) || (__FreeBSD_version >= 900506)
#include <xlocale.h>
#elif defined (FIXME CYGWIN FIXME) && defined(FIXME POSIX 2008 FIXME
#include <locale.h>
#else
typedef char* locale_t;
#endif

gag ★★★★★
()
Ответ на: комментарий от Rododendron
/usr/src/debug/cygwin-2.7.0-1/winsup/cygwin/lib/libcmain.c:37: undefined reference to `WinMain'
/usr/src/debug/cygwin-2.7.0-1/winsup/cygwin/lib/libcmain.c:37:(.text.startup+0x7f): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'

Где-то что-то попутано: ведь собирается обычная разделяемая библиотека libmlt.so.6.5.0, а не исполняемый файл.

gag ★★★★★
()
Ответ на: комментарий от gag

Где-то что-то попутано: ведь собирается обычная разделяемая библиотека libmlt.so.6.5.0, а не исполняемый файл.

Куда копать?

Rododendron
() автор топика
Ответ на: комментарий от Rododendron

Как обычно: начинать с точной команды, которая собирает. Если ничего подозрительного не видно, то начать проходиться по объектникам в поиске виновника.

gag ★★★★★
()
Ответ на: комментарий от gag

Спасибо за помощь. Оставил эту затею, собрал библиотеку в Линуксе.

Rododendron
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.