Cygwin + MinGW + GCC 相談室 Part 8
ありがとうございました。おかげさまで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は通りました。 調子に乗って「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が通らないのはなぜでしょうか? Wikipediaに書いてあるじゃん http://ja.wikipedia.org/wiki/Pkg-config まあ要するにコンパイルフラグをいじらなくて済むという話では MSYS2 Avira で TR/Crypt.XPACK.Gen2 連発するから困る >>26 pkg-configにコンパイル時のフラグを調べるためのデータを置く場所を教えるため。 てか、そこまで出来てるくせに勘が悪いな >>27 >>29 コンパイル時のフラグの格納場所でしたか。 不思議なのはfdk-aacはPKG_CONFIG_PATHの場所を教えなくても問題無く進み、 Opusのときはきちんと提示してやらないと進まなかった点です。 二つは仕組みが違うんでしょうか? >>30 デフオルトの場所にあれば教えんでも工工わな >>31 fdk-aacもOpusも共に ./configure --prefix=/mingw/i686-w64-mingw32 とconfiguraしています。だから同じ /mingw/i686-w64-mingw32 にライブラリは格納されてるはずなんです・・・ Opusだけどっかイレギュラーな場所にライブラリをコピーしちゃってるんでしょうかね? >>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 を設定する必要がある。 >>33 そういうことでしたか・・・ そういうの詳しい人が身近にいてくれると助かるんですが・・・ 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パスを認識させる良い方法がありましたら御指南願います。 >>35 これはコンパイラでなく、OSの仕様。 windows OSの仕様を変更させるか、コンパイラ改造するしかないんでは? 認識できるわけではないが、簡単なのは自作ラッパーを挟む。 >>35 Cygwinの32bitと64bitだとルートディレクトリが違うからじゃね? 32bitコード書くならCygwin32上で作業した方がいいのでは。 >>37 windows8でcygwin32使うとfork errorでまくりでコンパイルが進まないorz >>36 いやいや、cygwin64環境、cygwin32環境でネイティブのgccを使うとPOSIXパス使えるんだわ。 ところが、cygwin64環境でcygwin32(i686-pc-cygwin)だと使えないわけで。 32bit版cygwin1.dllがルートパスをどこと認識してるか、ってところなのかな。 >>38 rebaseallやってもforkエラー出まくりなんだとしたらしゃーないな。 cygwin1.dllがあるディレクトリの1つ上がルートディレクトリになってるはず。 単にUnix形式になってさえいればいいのなら /cygdrive/c/cygwin64/home/foo/bar.txt で 開けばいいし、それだとダメならfstabをいじるか >>40 windows7ではrebaseで治るんだけどなぁ。8.1はどうやっても連発で。 cygwin1.dllの一つ上がルートディレクトリはいい話を聞きましたわ。 マウントかリンクでなか胡麻化せるかも >>40 ファイル回りを/cygdrive形式で徹底することでなんとか胡麻化しできました 有難うございました。 >>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混在できるようになった。 OpenMPをお使いの方、おらっしゃられるでござるか? あるプログラムをmakeしてるんですが、 ./configureで "Can't find pthread library" って出ます。 どうすればpthread libraryをインストールできますか? g++で関数に一時オブジェクトを渡した場合の警告を抑制するにはどうしたらよいですか? function( &HOGE() ) taking address of temporary いったん変数に受けて回避していますが、その変数を作るのがめんどうくさいです。 MinGWでlibmysql.dllを使いたくて http://blog.livedoor.jp/dq_school/archives/1256405.html を参考にして > reimp libmysql.lib > gcc -I"/C/Program Files/MySQL/MySQL Connector C 6.1/include" -o tester.cgi tester.c "/C/Program Files/MySQL/MySQL Connector C 6.1/lib/liblibmysql.a" とか > reimp -c -d libmysql.lib > dlltool -k -d libmysql.def -l libmysql.a とかやってみたんだけど相変わらず 「undefined reference to mysql_init@4'」 とかのエラーが出やがります。 誰か助けてください。 defファイルを覗いてみたら「@n」のついてる関数名が1つも無いのが気になったけど、 http://tsubaki.hatenablog.com/entry/20121020/1350734844 の >defファイルの中を見ると関数名の後ろに@8だの@12だの色々な数字がついているのが分かります。 との記述と食い違うのが気になります。 mingwはvc++用のライブラリをそのまま食えるだろ 解凍したら、gccが出てくるのでは 7zだから解凍できないとか? MinGW32がちょっとおかしい。TDM-GCC-32ではdbghelp.hが見つからない。 stddef.hが見つからない。何でやねん。 #define _CRT_SECURE_NO_WARNINGS #define _CRT_NON_CONFORMING_SWPRINTFS #undef __STRICT_ANSI__ #define __NO_INLINE__ // https://github.com/g-truc/glm/issues/300 Shit! gdbの使い方覚えないといけない。ややこしい! Cygwinってwindows上でlinuxのsocketプログラムをコンパイル・実行して.outファイルを吐ける って認識でおk? UNIX系OSでは「a.out」というファイルが出来上がるので、それを実行します。 Windows+Cygwinでは、「a.exe」というファイルが生成されます Mingwで/etc/fstabをいじらないとautotoolsが動かないなんて初めて知ったわ! しかも/でlsしても表示されないとかわかりにくw よろしくお願いします。 (1) sizeof(long double)って環境依存だよな。 (2) struct A { int *p; size_t s; int u; }; なぜsizeof(struct A)が24になるのか理解できない。 20になると思ったのに。 いい加減msysからmsys2に移行しようとして導入したんだけど、なぜかprofileにインクルードパス 指定してconfigure走らせるとshがコアバンプ吐く。ライブラリパスは指定しても問題なし。 なのでconfigureの時にいちいちCFLAGSにパス書き込んでるんだけど、そういう仕様なのかなコレ msys2でconfigureは一回もやってないが、なんかファイル名補完がおかしいな gcc -o test.exe test.cでコンパイルした./test.exeが./t<tab>で補完できない ./test.e<tab>でようやく補完できる test.c があるとダメみたい。拡張子なしtestもダメ test.txtがあってもおkで.cppも.ccもダメだ。コンパイラで使う拡張子がダメ? 検索すると出てくる日記にある、実行権限どうこうとはまた話が違うようだ。 こっちが悪いのか設定でなんとかなるのかわかんない 回避策としては、_test.exeなどと先頭に_でもつければ./_<tab>2回でいいみたい。 そもそもいきなり<tab>で何もでないのは普通の挙動だっけ?まいっか ストレージ損傷に備えてのMinGWシステム丸ごとバックアップとリストアのノウハウ下さい はじめて、MinGW使ってるんだけど テキストにプログラム書いて保存して、コマンド実行だろ? 簡略化できませんか? >>68 ターミナルで3文字くらい打ち込んだらタブキーを押せ 適当なビルドツール、タスクランナー、それをテキストエディタから呼び出すための プラグイン これ以上はどの言語でどのエディタ使って作ってるかわからんからなんとも言えん まあたいていの場合保存、ビルド、実行まで連続でやってくれるプラグインを 作ってる人がいると思う だからそれを自動実行したいって話じゃないの? 最近ではmakeやautotoolsを包括したcmakeってのが使われてるみたいだけど 使ってないからまだよくわからんな 自分はvimにquickrunってプラグインいれてる どの言語でも適切にビルドや実行のプロセス起動してくれてる 初心者です MinGWのページいってダウンローダー取ってきてMinGW Installation Manger起動して Basic Setupのそれっぽい4つほどチェックしてインストールしたら MinGW\msys\1.0\binにmakeやbashとかはあるのにconfigureがないのはどうしたらいいでしょうか? All Packageみてもそれらしいのが見つからない configureは作りたいプログラム毎に全部中身が違う つまりあなたの責任でなんとかするしかない あるいは小規模ならconfigureは無しにするという選択肢もある >>80 レス感謝 勘違いしてました 79の質問取り消します autotools使うならmsysの中にあるpostinstall忘れずに MinGWなのですが ターミナルでfindコマンドを実行すると 日本語の表記が文字化けします lsやdiffで表示される文字は化けないのですが 考えられる原因って何かありますか? 具体的にどう実行するとどういうファイル名がどう化けるかを mingwは日本語対応じゃないから。 cygwinとminttyつかえ >>83 自分のところだと find は find -print0 だとなぜか漢字が表示される ちょっと前までcygwin使い辛い気がしてたんだけど gnupackで随分導入しやすくなってたんだな >>87 同じくfind -print0だと表記は問題なくなりましたけど 改行されなくて見辛いですね・・・ ls -C | nkf -s ls -C | iconv -f cp932 -t cp932 ls -C | nkf -w ls -C | iconv -f cp932 -t UTF-8 とか面倒くさい >>89 find . -print0 | xargs -0 -n1 find "." -maxdepth 1 -exec echo \"\{\}\" \; とか面倒くさい setup.exe落ちてこない。 setupもmirrorに撒けよな。 sourceforgeのmsysが怪しいらしいよ。ウイルス? だれかはよmsysを検証してくれ。msysが怪しくて仕事にならん。 使ってるセキュリティソフトのメーカーに言え それか別の所から落とせ MSYSにウイルス入ってるらしいよ。配布元がsourceforgeしかないから対処法なし。 http://devkitpro.org/viewtopic.php?f=2& ;t=2223 MSYS2のmingw32でgcc -vを実行すると --disable-sjlj-exceptions --with-dwarf2 になっていた。 MSYS2のmingw64だと、特に指定はないからsjljだろうな。 英語が読めないのはしょうがないとしてせめてニュースの日付くらいは理解できるようになってくれ msys2自体をpacmanでインストールしたら エラーがいっぱい出たのでmsys2をフォルダーごと消去ましたでありんす ただの誤検知じゃないか! 少しは内容読んでから書き込め msys2で作ったプログラムはmsys2でしか動かないのでしょうか? clang++でコンパイルしてみたらmsys2でしか動きませんでした G++でも同じ症状です アプリケーションを正しく起動できませんでした(0x000007b)。とでます。 文字コードもutf8じゃなくなります 標準入力を、リダイレクトでファイルから入力しても 引数の数が1つのままで2になりません なぜかmsys64/binにあるclang++でwindowsのコマンドプロンプトで コンパイルしたら実行できました なぜmsys2でコンパイルすると実行できないんですか? msys2でもmingw64/binに移動して./g++でmsys2上でコパイルしても コマンドプロンプトで動きます /mingw64/bin/g++ a.cpp と絶対パスを指定してもコマンドプロンプトで動きません しかし/mingw64/binに移動してg++を実行すると動きます 出来たexeファイルをmingw64/binに移動したら動きました このフォルダに実行するのに必要なファイルがあるのかもしれません libgcc_s_seh-1.dll libstdc++-6.dll libwinpthread-1.dll を入れたら動きました これなしで動くようには出来ないのでしょうか? 検索したら解決しそうなのでもういいです ありがとうございました まだ3つのうち2つの問題が解決してないですよ リダイレクトの問題とutf8の問題です リダイレクトの問題はやり方自体間違っていました それでもutf8がmainの引数から読み取れない問題が残っていますね これは難しそうなので諦めます これを含めた11個の書き込みは このスレッドに存在しないとみなしてください そうしてこのスレッドへの書き込みの締めくくりとさせていただきました utf-8の問題はmsys2_shell.batで起動して gccをインストールしたらutf8で読み込みました msys2_shell.batではclangが使えないのが問題ですね どうやら解決策は無いみたいですね clangってマイナーなのでmsys2までサポートしてると考えにくい msys2開発してる人数少ないはず read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる