我正在尝试使用--enable-64为Windows编译Octave nsi-installer以获得大型阵列支持。
尝试1:在Windows 10上使用Linux Mint虚拟机:
./ 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
init'的未定义引用: /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:错误:ld返回1退出状态
所以,问题是lock.c中对'__imp_pthread_'函数的所有这些未定义的引用。
当我在这些行看到lock.c时,代码显示:
err = pthread_mutexattr_init (&attributes);
所以我的主要问题是,为什么在链接中将“__imp_”添加到函数的前面?
如果我是'libpthread.so',我会看到类似的内容:
pthread_mutexattr_init.o: 0000000000000000 T __pthread_mutexattr_init 0000000000000000 T pthread_mutexattr_init
所以函数在那里,但链接没有看到它们,因为附加了'__imp_'?我不明白......
日志显示使用'-pthread'而不是'-lpthread',我认为这是推荐的。当我查看日志的顶部时,它显示:
检查pthreads库-lpthreads ... no
检查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。
是否有任何想法?