Showing posts with label L-SMASH-Works. Show all posts
Showing posts with label L-SMASH-Works. Show all posts

3 Nov 2014

MinGW-w64.GCCでビルドしたDLLのMSVC用インポートライブラリを作る

MinGWなGCCで作ったライブラリをMSVCで使いたい時,特にsharedなライブラリをリンクする時どうするかのメモ.

とりあえずdefファイルが欲しい.
gccでDLLを作る時に--output-def,dllname.defを渡せばdefを作ってくれるのでMakefileとか弄ったほうが早い場合はそれで出力する.
ただしgccが吐くdefファイルはMSVCのlib.exeでインポートライブラリを作る時にちと都合がわるいので
sed -i "s/ @[^ ]*//"  dllname.def
で前処理しておく.
Makefileいじるのとか面倒な時やもう既にビルドしてしまった時はMinGW-w64-toolsに含まれているgendefを使って
gendef dllname.dll
若しくは
gendef - dllname.dll > dllname.def
としてdefファイルを作る.上の場合dllname.defが生成される.下の場合リダイレクトで好きな名前のファイルとして作れる.
gendefで作ったdefファイルはsedでの処理は必要ない.
後は出来たdefファイルとDLLを使って
lib.exe -machine:ARCH -def:dllname.def -out:name.lib
でMSVC用のインポートライブラリname.libが出力される.
この時dllname.def内に
LIBRARY "hoge.dll"
とあればname.libはhoge.dllに対するインポートライブラリ,なければdefファイル名のdllname.dllに対するインポートライブラリとなる.
gccで出力した場合はLIBRARYは記述されないので自分で書くかdefファイルがDLLと同じ名前になるようにする必要がある.
gendefはLIBRARYが書かれるため特にファイル名は気にしなくても良い.
*.libがどのDLLに対するものか自信がなければstringsとgrepで確認すれば良い.
また,ARCHは32bitの場合i386,64bitの場合x64を渡す.

以上.

ちなみにffmpegはconfigure時にPATHにlib.exeがあると自動的に上記の過程を実行しDLLをビルドした際はMSVC用のインポートライブラリ (*.lib) を作ってくれる.
lib.exeが無い場合に作られるのはdlltoolを用いて作られるものである.
これがMSVCと混ぜて使う時にどれほどの互換性があるかはよく知らない.

なぜこれを書いたかというとLSMASHSource.dllをsharedでビルドしているのだがその時にliblsmashに対して上記の作業をしているからである.(patch当てているので毎回手作業でやっているわけではない)

15 May 2014

L-SMASH-Worksをr725に更新

バイナリの更新エントリは久しぶり…
音声ストリームを含むファイルをLWLibavで開き,閉じる際メモリが開放されずにAvsPmodなどで開いたり閉じたりを繰り返すと徐々にメモリが食われていく問題が修正されています.個人的に更新を推奨します.

1 Nov 2013

L-SMASH-Worksをr693に更新

libavにHEVC decoderのpatchが入り,L-SMASH-Worksのhevc branchがmaster branchにマージされたため更新しました.
ただしライブラリはlibavでなくffmpegを使用.
デコードはそれほど重くないです.
RAW(Annex B)/MP4/Matroska にて確認してます.TSはmuxするの面倒だったので未確認.
それとフィールド符号ピクチャはrepeat有効にしなくても自動でフレーム構築するように変更されました.
右サイドバーからDLできます.

あと,L-SMASH cliのmuxerは仕様が明確になるまでHEVC mux機能はr786にて一時的に無効化されています.
MP4にHEVCをmuxしたければMP4Box使うなりr785以前のHEVC mux機能があるバイナリ手に入れるなり自ビルドしてどうにかするなりして下さい.