忍者ブログ

なんだか

知らないほうが幸せかもしれない

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

cygwin64でなぜか動くdllなperlができた

Any additional cc flags?
[-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fno-strict-aliasing -pipe -fstack-protector]
-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fno-strict-aliasing -g -DUSEIMPORTLIB

-DUSEIMPORTLIB
がポイントでした。
ちゃんとソースのヘッダーに仕掛けが用意してありました。流石、息の長い言語だけあります。

$ make PERL_ARCHIVE_AFTER=-lcrypt

これで、外部参照されている変数がないとlink時に怒られるので、globals.cにその変数を追加しました。
追加分export.perl.dll

$ make test

t/op/readline .................................................

だんまりになるので、t/op/readline.tを削除

cpan/Text-Tabs/t/wrap ......................................... ok
cpan/Tie-RefHash/t/rebless .................................... ok
cpan/Tie-RefHash/t/refhash .................................... ok
cpan/Tie-RefHash/t/storable ................................... ok
cpan/Tie-RefHash/t/threaded ................................... ok
cpan/Time-HiRes/t/alarm .......................................
cpan/Time-HiRes/t/ualarm ......................................

cpan/Time-HiRes/t/alarm,cpan/Time-HiRes/t/ualarmでだんまりになるので、テスト不成功になるように変更

で、

Failed 14 tests out of 2306, 99.39% okay.
u=10.12  s=7.97  cu=696.49  cs=487.23  scripts=2306  tests=605901

こういう診断が出ました。

upstreamのperlでやっているので、extensionsに
Encode Encode/Byte Encode/CN Encode/EBCDIC Encode/JP Encode/KR Encode/Symbol Encode/TW Encode/Unicode
を追加しています。

cygwin64(cygwin1.dll)の完成度、高いですね。

拍手[0回]

PR

cygwin64のstaticなperlがやっとできた

親切な人が作ってくれたstaticなperlがcygwin1.dllのverupで動かなくなったようなので
自分で再度、ビルドに挑戦してみました。

perl-5.16.2ではなく、upstream(5.17.10)のもので試しました。

$ ./Configure

What is the file extension used for shared libraries? [dll] none

Any additional cc flags?
[-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fno-strict-aliasing -pipe -fstack-protector]
-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fno-strict-aliasing -g

Build a shared libperl.none (y/n) [y] n

What extensions do you wish to include? [Win32CORE] B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Text/Soundex Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize Win32 Win32API/File XS/APItest XS/Typemap arybase attributes mro re threads threads/shared Win32CORE

-fstack-protectorを指定すると動かないようです。

$ make PERL_ARCHIVE_AFTER=-lcrypt

グローバル変数の2Gの壁?でlinkが失敗するので、globals.cにexport.perlを追加しました。

libperl.aでextensionsがdllの場合、

Undefined subroutine &Digest::MD5::md5 called at Porting/pod_lib.pl line 100.


で止まります。

拍手[0回]

cygwin64でgettext-0.18.2をビルドしようとしたら

$ ../gettext-0.18.2/configure --prefix=/usr --sysconfdir=/etc --build=x86_64-pc-cygwin
$ make
relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp_exit_failure'
とエラーが出て、ビルドが止まってしまいました。

エラーメッセージをたよりに検索してみたところ、2Gの壁があるとかなんとかの情報を見つけました。
(実は関係無かったのですが)

グルーバル変数を参照するときに、参照できないことがあるとかの言われていたのはこの事だったのかなと思いつつ
いろいろ試したり、ソースを眺めていたりしたりしていたら、解決方法を見つけました。

windowsのx86_64なgccだとdllimportする時のnameが変わっていたのでした。

gettext-0.18.2/gettext-tools/woe32dll/export.hの
#if (defined _WIN64 && defined __MINGW32__)

#if (defined _WIN64 && defined __MINGW32__) || (defined __CYGWIN__ && defined __x86_64__)
に変更することで、無事ビルドが終了しました。

export.hをよく読んでみると、変数参照時の2Gの壁を回避する?ために作成されたマクロだったようです。
意外と、あっさり、2Gの壁をクリアしていたのには、驚きました。

拍手[0回]

cygwin64でcloog-0.18.0をビルドしようと思ったら

checking for __gmpz_init in -lgmp... no
configure: error: Can't find gmp library.

configure時にこんなエラーが出ました。
config.logを覗いてみると

/usr/lib/gcc/x86_64-pc-cygwin/4.8.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find crtfastmath.o: No such file or directory

crtfastmath.oがないのはなぜかというと
x86_64-pc-cygwin用のpatchの

+ tmake_file="${tmake_file} ${tmake_eh_file} ${tmake_dlldir_file} i386/t-slibgcc-cygming i386/t-cygming i386/t-cygwin i386/t-crtfmt-dfprules i386/t-chkstk"

色がついた部分のi386/t-crtfmとt-dfprulesの間にspaceがありませんでした。

修正してx86_64-pc-cygwinのgccをビルドし、

$ cp crtfastmath.o /usr/lib/gcc/x86_64-pc-cygwin/4.8.0/

で、cloog-0.18.0をビルド出来ました。

拍手[0回]

cygwin64なgccのメッセージの表示が化けるのは

本家cygwin64のgccの出力です。cmdプロンプトで

bash-4.1$ LANG=ja_JP@ gcc -v
腟„▒粋昭▒▒ spec ▒‚’篏睡”▒▒—▒▒▒„▒障™▒€‚
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-cygwin/4.8.0/lto-wrapper.exe
▒‚帥ƒ若‚蚊ƒƒ▒ƒˆ: x86_64-pc-cygwin
configure 荐㊤▒š: /home/corinna/src/cross-cygwin/gcc/configure --host=x86_64-pc-
cygwin --target=x86_64-pc-cygwin --prefix=/usr --sysconfdir=/etc --enable-langua
ges=c,c++ --disable-shared --enable-static
▒‚鴻ƒ▒▒ƒƒ▒ƒ‰▒ƒ≪ƒ‡▒ƒĝ single
gcc ▒ƒ▒ƒ若‚吾ƒсƒ▒ 4.8.0 20130215 (experimental) (GCC)
bash-4.1$ LANG=ja_JP@ gcc
gcc: ▒‡翫‘順š„▒‚▒▒ƒ▒▒ƒ幞 ▒…ュŠ›▒ƒ•▒‚<‚ゃƒ▒▒Œ▒‚▒‚Š▒障›▒‚“
▒‚潟ƒ潟ƒ‘▒‚ゃƒ▒▒‚’▒œ罩≪—▒障—▒Ÿ▒€‚

--with-included-gettextで作りなおしたものの表示です。cmdプロンプトで

bash-4.1$ LANG=ja_JP@ gcc.exe -v
組み込み spec を使用しています。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/4.8/libexec/gcc/x86_64-pc-cygwin/4.8.0/lto-wrappe
r.exe
ターゲット: x86_64-pc-cygwin
configure 設定: ../gcc-4.8-20130217/configure --prefix=/usr/local/4.8 --enable-l
anguages=c,c++,fortran --build=x86_64-pc-cygwin --with-included-gettext --disabl
e-multilib --disable-bootstrap
スレッドモデル: single
gcc バージョン 4.8.0 20130217 (experimental) (GCC)
bash-4.1$ LANG=ja_JP@ gcc.exe
gcc: 致命的エラー: 入力ファイルがありません
コンパイルを停止しました。

gcc内のintlを使うと文字化けは起こらないようです。 --with-included-gettext


ちなみにdllは以下のように出来てます。

bash-4.1$ ls /usr/local/4.8/bin/*.dll
/usr/local/4.8/bin/cyggcc_s-seh-1.dll  /usr/local/4.8/bin/cygssp-0.dll
/usr/local/4.8/bin/cyggfortran-3.dll   /usr/local/4.8/bin/cygstdc++-6.dll
/usr/local/4.8/bin/cygquadmath-0.dll

base-cygwin-toolchain-install-first-20130222.x86_64.tar.xz
が出てます。libgcc等のdllが入ってます。

拍手[0回]

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

最新CM

最新記事

(07/27)
(03/27)
(03/26)
(03/23)
(03/22)
(03/19)
(03/18)
(03/18)
(03/15)
(03/14)
(03/13)
(03/12)
(03/11)
(03/11)
(03/08)
(03/08)
(03/06)
(03/05)
(03/02)
(03/01)
(02/28)
(02/27)
(02/24)
(02/23)
(02/22)

プロフィール

HN:
kenrou
性別:
非公開

バーコード

ブログ内検索

最古記事

(12/15)
(12/16)
(12/17)
(12/18)
(12/19)
(12/20)
(12/21)
(12/22)
(12/23)
(12/24)
(12/25)
(12/26)
(12/27)
(12/28)
(12/29)
(12/30)
(12/31)
(01/01)
(01/02)
(01/21)
(01/22)
(01/23)
(01/24)
(01/24)
(01/28)

P R

忍者アナライズ

コガネモチ

忍者カウンター

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31