Cygwin + MinGW + GCC 相談室 Part 8 (988レス)
上下前次1-新
24: 2014/12/23(火)23:02 ID:40EW/Y2H(1) AAS
MinGWはこっちの方がよくね?
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-posix/seh/
hgは
http://takuya-1st.hatenablog.jp/entry/20100623/1277256227
ここが参考になるかな
25: 23 2014/12/24(水)21:54 ID:8/ZOVusd(1/2) AAS
ありがとうございました。おかげさまでhg, cmake, ついでにgitまで使えるようになりました。
> MinGWはこっちの方がよくね?
MSYSを別途導入する必要があるようだったので>>23のMSYS_MinGW-w64_GCC_492_x86-x64_Full.7zを使うことにしました。
ところでffmepgのコンパイルをしていて些細な疑問を持ったのですが、
http://d.hatena.ne.jp/kamedo2/20130619/1371662769
のサイトを参考に音声コーデックのfdk-aacをffmpegにマージしてみました。
サイトに書かれていたとおり、
/FFmpeg/fdk-aac-0.1.1/
に移動して
./configure --prefix=/mingw/i686-w64-mingw32
make && make insutall
を実行し、そのあとffmpegのコンパイルをするべく
cd ../ffmpeg-HEAD-4110828
でffmpegフォルダに移動し
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-libfdk-aac
--extra-ldflags=-static --extra-cflags='-march=native -mfpmath=sse' --optflags=-O2
を実行したところ問題無くconfigureは通りました。
26(1): 23 2014/12/24(水)21:55 ID:8/ZOVusd(2/2) AAS
調子に乗って「fdk-aacだけでなく最近はやりのOpusという音声コーデックもマージしよう」と
http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz
をダウンロード&展開し、
./configure --prefix=/mingw/i686-w64-mingw32
make && make insutall
を実行。その後ffmpegフォルダに移動して、
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-libfdk-aac --enable-libopus
--extra-ldflags=-static --extra-cflags='-march=native -mfpmath=sse' --optflags=-O2
を実行してみたところ
ERROR: opus not found using pkg-config
Note: When building a static binary, add --pkg-config-flags="--static".
とエラーが返されました。fdk-aacはよくてopusは何でダメなの?訳が分からずググッてみると
ffmpegのconfigureを実行する前に
export PKG_CONFIG_PATH="/mingw/i686-w64-mingw32/lib/pkgconfig"
のおまじないを唱えると問題無くconfigureが通ることが分かりました。
http://qiita.com/tukiyo3/items/ac36375d426d39f203fb
fdk-aacはPKG_CONFIG_PATHをエクスポートせずとも良くて
OpusはPKG_CONFIG_PATHをエクスポートしないとconfigureが通らないのはなぜでしょうか?
27(1): 2014/12/26(金)21:04 ID:OP/Bn95j(1) AAS
Wikipediaに書いてあるじゃん
http://ja.wikipedia.org/wiki/Pkg-config
まあ要するにコンパイルフラグをいじらなくて済むという話では
28: 2014/12/27(土)13:54 ID:BCIPL5E0(1) AAS
MSYS2 Avira で TR/Crypt.XPACK.Gen2 連発するから困る
29(1): 2014/12/29(月)09:28 ID:mY3AFavo(1) AAS
>>26
pkg-configにコンパイル時のフラグを調べるためのデータを置く場所を教えるため。
てか、そこまで出来てるくせに勘が悪いな
30(2): 23 2014/12/29(月)11:52 ID:m849QDq1(1) AAS
>>27
>>29
コンパイル時のフラグの格納場所でしたか。
不思議なのはfdk-aacはPKG_CONFIG_PATHの場所を教えなくても問題無く進み、
Opusのときはきちんと提示してやらないと進まなかった点です。
二つは仕組みが違うんでしょうか?
31(1): 2014/12/30(火)12:28 ID:NSL+ZZg4(1) AAS
>>30
デフオルトの場所にあれば教えんでも工工わな
32(1): 23 2014/12/30(火)16:47 ID:tC9GpZ1z(1/2) AAS
>>31
fdk-aacもOpusも共に
./configure --prefix=/mingw/i686-w64-mingw32
とconfiguraしています。だから同じ /mingw/i686-w64-mingw32 にライブラリは格納されてるはずなんです・・・
Opusだけどっかイレギュラーな場所にライブラリをコピーしちゃってるんでしょうかね?
33(1): 2014/12/30(火)21:17 ID:NhJ3bWE9(1) AAS
>>30 >>32
疑問を持った時点でffmpegのconfigureの中身を見なさいな。(以下抜粋
> enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
> enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
ライブラリ有無のチェックに、libopusはpkg-configを用いて判定してるってだけ。
なので PKG_CONFIG_PATH を設定する必要がある。
34: 23 2014/12/30(火)22:10 ID:tC9GpZ1z(2/2) AAS
>>33
そういうことでしたか・・・
そういうの詳しい人が身近にいてくれると助かるんですが・・・
35(2): 2015/01/04(日)16:52 ID:BvegMGE7(1/5) AAS
cygwin64上で作業をやっとります。
故あって32bitコードを書かねばならないのですが、
i686-w64-mingw32-gcc, i686-pc-cygwin-gcc共にfopenでPOSIXパスを渡すと、
errno=2, No such file or directory
ということで開けません。
windowsパスにすると開けます
ダメ fopen("/home/foo/bar.txt", "r");
OK fopen("c:/cygwin64/home/foo/bar.txt", "r");
mingwでは仕方ないかとは思いますが、cygwin32までPOSIXパスを否定されると辛い。
objdumpで見ても、fopenはcygwin1.dllのものを使用している模様。
PATHは/usr/i686-pc-cygwin/sys-root/usr/binを通してあります。
POSIXパスを認識させる良い方法がありましたら御指南願います。
36(1): 2015/01/04(日)16:57 ID:Qu74iV3W(1) AAS
>>35
これはコンパイラでなく、OSの仕様。
windows OSの仕様を変更させるか、コンパイラ改造するしかないんでは?
認識できるわけではないが、簡単なのは自作ラッパーを挟む。
37(1): 2015/01/04(日)17:25 ID:tnXQTL6U(1/2) AAS
>>35
Cygwinの32bitと64bitだとルートディレクトリが違うからじゃね?
32bitコード書くならCygwin32上で作業した方がいいのでは。
38(1): 2015/01/04(日)18:42 ID:BvegMGE7(2/5) AAS
>>37
windows8でcygwin32使うとfork errorでまくりでコンパイルが進まないorz
39: 2015/01/04(日)18:44 ID:BvegMGE7(3/5) AAS
>>36
いやいや、cygwin64環境、cygwin32環境でネイティブのgccを使うとPOSIXパス使えるんだわ。
ところが、cygwin64環境でcygwin32(i686-pc-cygwin)だと使えないわけで。
32bit版cygwin1.dllがルートパスをどこと認識してるか、ってところなのかな。
40(3): 2015/01/04(日)20:35 ID:tnXQTL6U(2/2) AAS
>>38
rebaseallやってもforkエラー出まくりなんだとしたらしゃーないな。
cygwin1.dllがあるディレクトリの1つ上がルートディレクトリになってるはず。
単にUnix形式になってさえいればいいのなら /cygdrive/c/cygwin64/home/foo/bar.txt で
開けばいいし、それだとダメならfstabをいじるか
41: 2015/01/04(日)23:12 ID:BvegMGE7(4/5) AAS
>>40
windows7ではrebaseで治るんだけどなぁ。8.1はどうやっても連発で。
cygwin1.dllの一つ上がルートディレクトリはいい話を聞きましたわ。
マウントかリンクでなか胡麻化せるかも
42: 2015/01/04(日)23:41 ID:BvegMGE7(5/5) AAS
>>40
ファイル回りを/cygdrive形式で徹底することでなんとか胡麻化しできました
有難うございました。
43: 2015/01/06(火)23:06 ID:ei45L6+i(1) AAS
>>40
/usr/i686-pc-cygwin/sys-root/usr
がcxgwin32のルートになるわけやね。
cygwin64の/homeや/optを/cygdpgve/c/cygwin64/homeの形式で
/usr/i686-pc-cygwin/sys-root/usr/homeとしてシンボリックリンク張ったらあらかた違和感なく32bit, 64bit混在できるようになった。
上下前次1-新書関写板覧索設栞歴
あと 945 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.015s