使用--enable-64

时间:2016-08-25 15:33:49

标签: c++ gcc octave mxe

我正在尝试使用--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。

是否有任何想法?

0 个答案:

没有答案