Компиляция nsi-установщика Octave MXE с —enable-64

Я пытаюсь скомпилировать nsi-установщик Octave для Windows с —enable-64 для поддержки больших массивов.

Попытка 1: использование виртуальной машины Linux Mint в Windows 10:

./ configure показывает, что все в порядке, и после запуска make довольно много завершается. Однако через несколько минут после «[build] default-octave» он вылетает. Глядя на журнал, при попытке связать liboctave / .libs / liboctave-3.dll, он говорит:

libgnu / .libs / libgnu.a (lock.o): в функции glthread_recursive_lock_init_multithreaded':
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:289: undefined reference to
__imp_pthread_mutexattr_init»
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:292: неопределенная ссылка на __imp_pthread_mutexattr_settype'
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:298: undefined reference to
__imp_pthread_mutex_init»
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:304: неопределенная ссылка на __imp_pthread_mutexattr_destroy'
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:301: undefined reference to
__imp_pthread_mutexattr_destroy»
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/glthread/lock.c:295: неопределенная ссылка на __imp_pthread_mutexattr_destroy'
libgnu/.libs/libgnu.a(strsignal.o): In function
в этом’:
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:143: неопределенная ссылка на __imp_pthread_key_create'
libgnu/.libs/libgnu.a(strsignal.o): In function
free_key_mem ‘:
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:170: неопределенная ссылка на __imp_pthread_setspecific'
libgnu/.libs/libgnu.a(strsignal.o): In function
strsignal ‘:
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:101: неопределенная ссылка на __imp_pthread_once'
libgnu/.libs/libgnu.a(strsignal.o): In function
GetBuffer ‘:
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:186: неопределенная ссылка на __imp_pthread_getspecific'
/home/mike/temp/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libgnu/strsignal.c:195: undefined reference to
__imp_pthread_setspecific»
collect2: error: ld вернул 1 состояние выхода

Итак, проблема в том, что все эти неопределенные ссылки на функции __imp_pthread_ в lock.c.

Когда я смотрю на lock.c в этих строках, код показывает:

  err = pthread_mutexattr_init (&attributes);

Итак, мой главный вопрос: почему при связывании в начало функции добавляется «__imp_»?

Если я «nm libpthread.so», я вижу такие вещи, как:

pthread_mutexattr_init.o:
0000000000000000 T __pthread_mutexattr_init
0000000000000000 T pthread_mutexattr_init

Значит, там есть функции, но ссылка не видит их, потому что ‘__imp_’ прикреплен? Я не понимаю …

Журнал показывает, что используется -pthread, а не -lpthread, что я рекомендую. Когда я смотрю на верхнюю часть журнала, он показывает:

проверка библиотеки pthreads -lpthreads … нет

проверка работоспособности pthreads без флагов … нет

проверка, работает ли pthreads с -Kthread … нет

проверка, работает ли pthreads с -kthread … нет

проверка библиотеки pthreads -llthread … нет

проверка, работает ли pthreads с -pthread … да

проверка на присоединяемый атрибут pthread … PTHREAD_CREATE_JOINABLE

проверка, требуются ли дополнительные флажки для pthreads … нет

Попытка 2: использование системы CentOS Linux:

Как и выше, ./configure работает, но немного в «[build] default-octave», он вылетает. Глядя на журнал, он говорит:

/u/glaucus-r1/mpjohnso/octave/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/liboctave/array/dim-vector.h: In instantiation of 'dim_vector::dim_vector(octave_idx_type, octave_idx_type, Ints ...) [with Ints = {int}; octave_idx_type = long long int]':
/u/glaucus-r1/mpjohnso/octave/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/libinterp/octave-value/ov-typeinfo.h:203:85:   required from here
/u/glaucus-r1/mpjohnso/octave/mxe-octave-3fc30cd416ac/tmp-default-octave/octave-4.1.0+/liboctave/array/dim-vector.h:215:5: error: unable to deduce std::initializer_list<_Tp>&&' from '{r, c, lengths#0}'

for (const auto l: {r, c, lengths...})
^

Таким образом, кажется, есть некоторая проблема с интерпретацией строки ‘{r, c, lengths …}’ … Моя первая попытка использовала GCC 4.4.7, но то же самое произошло после обновления до GCC 6.2.0 ,

Есть какие-нибудь мысли для того или другого?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]