2016-06-08 10 views
0

Я пытаюсь скомпилировать libpthreads-stubs-0.3 (для vaapi) на машине Windows с окружением MinGW и MSys. Я установил пакет mingw32-pthreads-w32 dev (версия 2.9.1-1) в MinGW.Ошибка при построении libpthreads-stubs-0.3 в Windows

Теперь, когда я пытаюсь скомпилировать libpthreads-заглушек-0.3 (Существует только один файл с именем stubs.c) я получаю противоречивые типы ошибок:

make all-am 
make[1]: Entering directory `/c/Users/Pawan/Downloads/Compressed/libpthread-stubs-0.3/libpthread-stubs-0.3' 
/bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I.  -g -O2 -MT stubs.lo -MD -MP -MF .deps/stubs.Tpo -c -o stubs.lo stubs.c 
libtool: compile: gcc -DHAVE_CONFIG_H -I. -g -O2 -MT stubs.lo -MD -MP -MF .deps/stubs.Tpo -c stubs.c -DDLL_EXPORT -DPIC -o .libs/stubs.o 

stubs.c:36:5: error: conflicting types for 'pthread_self' 
int pthread_self() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
    ^
In file included from stubs.c:29:0: 
c:\mingw\include\pthread.h:955:37: note: previous declaration of 'pthread_self' was here 
PTW32_DLLPORT pthread_t PTW32_CDECL pthread_self (void); 
            ^

stubs.c:153:5: error: conflicting types for 'pthread_exit' 
int pthread_exit() __attribute__ ((weak, alias ("__pthread_exit_stub"))); 
    ^
In file included from stubs.c:29:0: 
c:\mingw\include\pthread.h:950:32: note: previous declaration of 'pthread_exit' was here 
PTW32_DLLPORT void PTW32_CDECL pthread_exit (void *value_ptr); 
           ^
stubs.c:162:5: warning: 'pthread_equal' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes] 
int pthread_equal() __attribute__ ((weak, alias ("__pthread_equal_stub"))); 
    ^
stubs.c: In function '__pthread_equal_stub': 
stubs.c:187:16: error: invalid operands to binary == (have 'pthread_t' and 'pthread_t') 
    return (t1 == t2); 
       ^
make[1]: *** [stubs.lo] Error 1 
make[1]: Leaving directory `/c/Users/Pawan/Downloads/Compressed/libpthread-stubs-0.3/libpthread-stubs-0.3' 
make: *** [all] Error 2 

Теперь, когда я комментировать #include <pthread.h> на вершине файла и положить его в ifndef (потому что, если я не я получаю сообщение об ошибке: error: unknown type name 'pthread_t' что очевидно) я получаю ту же ошибку, что и выше:

#ifdef NEED_EQUAL_STUB 
#include <pthread.h> 
static int __pthread_equal_stub(pthread_t t1, pthread_t t2) 
{ 
    return (t1 == t2); 
} 
#endif 

Edit: Stubs.c Файл код

#define HAVE_STRUCT_TIMESPEC 

//#include <pthread.h> 
#include <stdlib.h> 
#include "config.h" 

#ifndef HAVE_PTHREAD_SELF 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_self() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_self = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_MUTEX_INIT 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_mutex_init() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_mutex_init = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_MUTEX_DESTROY 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_mutex_destroy() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_mutex_destroy = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_MUTEX_LOCK 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_mutex_lock() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_mutex_lock = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_MUTEX_UNLOCK 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_mutex_unlock() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_mutex_unlock = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_COND_INIT 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_cond_init() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_cond_init = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_COND_DESTROY 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_cond_destroy() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_cond_destroy = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_CONDATTR_INIT 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_condattr_init() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_condattr_init = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_CONDATTR_DESTROY 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_condattr_destroy() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_condattr_destroy = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_COND_WAIT 
#define NEED_ABORT_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_cond_wait() __attribute__ ((weak, alias ("__pthread_abort_stub"))); 
# else 
# pragma weak pthread_cond_wait = __pthread_abort_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_COND_TIMEDWAIT 
#define NEED_ABORT_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_cond_timedwait() __attribute__ ((weak, alias ("__pthread_abort_stub"))); 
# else 
# pragma weak pthread_cond_timedwait = __pthread_abort_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_COND_SIGNAL 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_cond_signal() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_cond_signal = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_COND_BROADCAST 
#define NEED_ZERO_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_cond_broadcast() __attribute__ ((weak, alias ("__pthread_zero_stub"))); 
# else 
# pragma weak pthread_cond_broadcast = __pthread_zero_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_EXIT 
#define NEED_EXIT_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_exit() __attribute__ ((weak, alias ("__pthread_exit_stub"))); 
# else 
# pragma weak pthread_exit = __pthread_exit_stub 
# endif 
#endif 

#ifndef HAVE_PTHREAD_EQUAL 
#define NEED_EQUAL_STUB 
# ifdef SUPPORT_ATTRIBUTE_ALIAS 
int pthread_equal() __attribute__ ((weak, alias ("__pthread_equal_stub"))); 
# else 
# pragma weak pthread_equal = __pthread_equal_stub 
# endif 
#endif 

#ifdef NEED_ZERO_STUB 
static int __pthread_zero_stub() 
{ 
    return 0; 
} 
#endif 

#ifdef NEED_ABORT_STUB 
static int __pthread_abort_stub() 
{ 
    abort(); 
} 
#endif 

#ifdef NEED_EQUAL_STUB 
//#define HAVE_STRUCT_TIMESPEC 
#include <pthread.h> 
static int __pthread_equal_stub(pthread_t t1, pthread_t t2) 
{ 
    return (t1 == t2); 
} 
#endif 

#ifdef NEED_EXIT_STUB 
static void __pthread_exit_stub(void *ret) 
{ 
    exit(EXIT_SUCCESS); 
} 
#endif 
+0

Можете ли вы разместить свой файл stubs.c? Единственный раз, когда я это делал, было то, что разные файлы включали разные заголовки в разных местах, но с тем же именем, но поскольку у вас есть только один файл, я не думаю, что это так. – mgarey

+0

@mgarey Я добавил файл stubs.c. посмотрите пожалуйста. – Pawan

ответ

0

Я не могу воспроизвести вашу ошибку, но сделал (я думаю) успешно установить libpthreads-заглушек-0,3. Я использую 64-разрядную версию msys и mingw.

Я скачал libpthreads-заглушек-0,3 из this website, использовали смолу -xzf для извлечения его к домашней папке в MSYS, cd'd в папку, и сделал ./configure --prefix=/usr затем make затем make install.

У меня когда-то были error: conflicting types for ... и error: previous declaration for ..., и это было потому, что я включал pthreads.h mingw в одном месте и другую версию pthreads.h для Windows в другом месте.

Если все остальное не удается, попробуйте начать с установки пульта и libpthreads-stubs-0.3 с нуля.

 Смежные вопросы

  • Нет связанных вопросов^_^