2012年3月28日水曜日

jpegをWindowsでビルド

makefile.vcを修正:
CFLAGS= $(cflags) $(cdebug) $(cvarsdll) -I.

nmake -f makefile.vc nodebug=1

freetypeをWindowsでビルド

特定のmingw32-make.exeを用意します。

http://sourceforge.net/projects/mingw/files/MinGW/Extension/make/mingw32-make-3.81-20090910/
mingw32-make-3.81-20090910.tar.gzを使用します。

\msys\1.0などに展開。
builds\compiler\visualc.mkを編集。MS VC Runtime Libraryをダイナミックリンクするように指定。
CFLAGS ?= /nologo /c /Ox /W3 /MD

\msys\1.0\bin\mingw32-make.exe setup visualc

\msys\1.0\bin\mingw32-make.exe

2012年3月14日水曜日

WinDbgが発する「Failed to load data access DLL, 0x80004005」を無理やり回避した方法

方針:
  • 欲しい mscordacwks.dll が無いと言っているので、欲しくない mscordacwks.dll で代用してみます。

手順:
  1. [File]→[Symbol File Path...] にて、正しいパスを設定しているかどうかを確認します。

    例:
    cache*C:\DL.Symbols;SRV*http://msdl.microsoft.com/download/symbols

    C:\DL.Symbolsは、正しいシンボルファイル置き場に書き換えてください。

    Symbol File Pathを書き換える時は、WinDbgの起動直後にするのが良いです。

    また、何回も設定・終了・起動をして見て、きちんと書き換えられているかどうか、確認するのが良いです。
     
  2.  [File]→[Open Crash Dump...]で、開きます。
     
  3. .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll
    • (.load は Meta-Commands の 1 つです)
  4. !Threads
    Failed to load data access DLL, 0x80004005
    Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
                2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                    in the version directory
                3) or, if you are debugging a dump file, verify that the file 
                    mscordacwks___.dll is on your symbol path.
                4) you are debugging on the same architecture as the dump file.
                    For example, an IA64 dump file must be debugged on an IA64
                    machine.
    
  5. .cordll -ve -u -l 
    • (.cordll は Meta-Commands の 1 つです)
  6. !Threads
    CLRDLL: Unable to get version info for 'C:\DL.Symbols\mscorwks.dll\4E154C985a9000\mscordacwks.dll', Win32 error 0n87
    CLRDLL: Unable to find mscordacwks_x86_x86_2.0.50727.3625.dll by mscorwks search
    CLRDLL: Unable to find 'mscordacwks_x86_x86_2.0.50727.3625.dll' on the path
    CLRDLL: ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.3625.dll, Win32 error 0n2
    Failed to load data access DLL, 0x80004005
    Verify that 1) you have a recent build of the debugger (6.2.14 or newer)
                2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                    in the version directory
                3) or, if you are debugging a dump file, verify that the file 
                    mscordacwks___.dll is on your symbol path.
                4) you are debugging on the same architecture as the dump file.
                    For example, an IA64 dump file must be debugged on an IA64
                    machine.
    You can also run the debugger command .cordll to control the debugger's
    load of mscordacwks.dll.  .cordll -ve -u -l will do a verbose reload.
    If that succeeds, the SOS command should work on retry.
    If you are debugging a minidump, you need to make sure that your executable
    path is pointing to mscorwks.dll as well.
    
    • (!Threads または !sos.Threads は SOS.dll (SOS デバッガー拡張) コマンドの 1 つです)
  7. コマンドプロンプトにて:
    COPY C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscordacwks.dll C:\DL.Symbo
    ls\mscorwks.dll\4E154C985a9000\mscordacwks.dll
            1 個のファイルをコピーしました。
    
  8. .cordll -ve -u -l
     
  9. !Threads
    CLRDLL: Loaded DLL C:\DL.Symbols\mscorwks.dll\4E154C985a9000\mscordacwks.dll
    ThreadCount: 4
    UnstartedThread: 0
    BackgroundThread: 1
    PendingThread: 0
    DeadThread: 2
    Hosted Runtime: no
                                          PreEmptive   GC Alloc           Lock
           ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
       0    1 25a4 00163db0      a020 Enabled  015233a8:01524fc4 00160250     0 MTA System.Net.WebException (014fb184)
       2    2 3594 00170370      b220 Enabled  00000000:00000000 00160250     0 MTA (Finalizer)
    XXXX    3    0 001a52a0      9820 Enabled  00000000:00000000 00160250     0 Ukn
    XXXX    4    0 00212670   1801820 Enabled  00000000:00000000 00160250     0 Ukn (Threadpool Worker) 
    

※ google-code-prettifyを組み込み、表示を最適化しました。

2012年3月7日水曜日

php5.4の日本語ファイル名問題:パッチ編

*パッチにつきましては、#61315をご覧ください。#61309のパッチも含んでいます。

安定していると思われるphp5.2を常用していますが、そろそろ新機能目当てでphp5.4に乗り換えようと思いました。

そこで、実際に乗り換えてみました。

ドカン!

色々問題が出ました(^^;
エラーや警告や厳密性チェック報告の嵐です。

ここで重大な問題が…
php5.2では問題なかった、「ソ」や「表」を含むファイル名やフォルダ名が、php5.4になって通らなくなっていました。

statやscandir等について、ファイル名称の組み合わせ等で機能しない場合が有りますよという問題点が、乗り換え後に判明すると結構困るものです(^^;

そこで急場しのぎで動くモノを作ろうと、stepbystepを参考にしながら、ビルド環境を構築いたしました。

開発・デバッグし、対策を打ちました。

本家にパッチも投稿させて頂きました。

しかし、悲しいかな両方とも[Opn->Dup]に。つまり「オープン→重複投稿」決裁に失墜です… orz

投稿した報告はこちらの2通です:
Bug #61309: DBCS included UNC path broken due to incorrect toupper usage
Bug #61315: stat() fails with specific DBCS characters

#61309の方では、次のような回答を:

New Comment:
 We already have reports about that.
 Full unicode/wildchar support is being worked on.
新しいコメント:
 我々は既にその問題についての報告を受けています。
 フルunicode/wildchar対応をしているところです。

#61315の方では、次のような回答を頂きました:

New Comment:
 Same as before, a feature request is being worked on.
 please do not report one bug for every single file function about the same
problem.


新しいコメント:
 前回と同様です。機能要望については対応しています。
 同じ問題に関して、一つのファイル関数ごとに、一つのバグを報告するのはやめてください。

怒られてしまいました。orz

先様の心証をにわかに悪くした感じです。(^^;

参考までにパッチを投稿しています。

同じ境遇の方がいらっしゃいましたら、ご活用くださいませ。

但し、無保証・無責任でのご提供になります。申し訳ございませんm(_ _)m