簡體   English   中英

在Solaris 10 Sparc上將Perl編譯為64位

[英]compiling perl as 64 bit on solaris 10 sparc

我正在嘗試在Solaris sparc perl 5.22.2編譯為64位(操作系統為64位)。 它作為32位二進制文​​件進行了編譯和鏈接,現在,我將-m64標志添加到CFLAGSLDFLAGS ,並且出現以下錯誤:

...skipping...
perlio.c:3400: error: structure has no member named `_ptr'
perlio.c:3408: error: structure has no member named `_ptr'
perlio.c: In function `PerlIOStdio_get_base':
perlio.c:3531: error: structure has no member named `_base'
perlio.c: In function `PerlIOStdio_get_bufsiz':
perlio.c:3538: error: structure has no member named `_cnt'
perlio.c:3538: error: structure has no member named `_ptr'
perlio.c:3538: error: structure has no member named `_base'
perlio.c: In function `PerlIOStdio_get_ptr':
perlio.c:3547: error: structure has no member named `_ptr'
perlio.c: In function `PerlIOStdio_get_cnt':
perlio.c:3554: error: structure has no member named `_cnt'
perlio.c: In function `PerlIOStdio_set_ptrcnt':
perlio.c:3575: error: structure has no member named `_ptr'
perlio.c:3594: error: structure has no member named `_cnt'
make: *** [perlio.o] Error 1

作為參考,我從perlio.c提取了上述行:

3400:   STDCHAR *eptr = (STDCHAR*)PerlSIO_get_ptr(s);
3408:       if ((STDCHAR*)PerlSIO_get_ptr(s) != --eptr || ((*eptr & 0xFF) != ch)) {
3531:    return (STDCHAR*)PerlSIO_get_base(stdio);
3538:    return PerlSIO_get_bufsiz(stdio);
3547:    return (STDCHAR*)PerlSIO_get_ptr(stdio);
3554:    return PerlSIO_get_cnt(stdio);
3575:   PerlSIO_set_ptr(stdio, ptr); /* LHS STDCHAR* cast non-portable */
3594:    PerlSIO_set_cnt(stdio, cnt);

看起來它對源代碼做了一些奇怪的事情,請注意_ptr如何被視為單獨的實體,而該函數稱為PerlSIO_get_ptr 看起來像它被切斷了。

有人知道這里發生了什么嗎? 僅供參考,不要使用perlbrew之類的東西,我需要自己編譯:(。

事實證明,我需要將-Duse64bitall標志添加到Configure腳本。 所以最終我能夠與

export CFLAGS=-m64 # not sure if really nessessary - just what I did
./Configure -Duse64bitall -Dcc=gcc -d
make

對於我的設置,我還需要更多的庫,因此這是一個相當簡化的版本。 但是,它解決了本文中描述的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM