Cygwin + MinGW + GCC 相談室 Part 8
バイナリでかくても
結局実行するとそれだけメモリ食うんだろ? >>8
shared library全否定やな、それ >>7
それすると、パイプで繋ぐような使い方ができないんで。 >>10
bat/cmdファイルってそんな制限があったのか
だったらシェルスクリプトはどうかな >>9
そうなんだけど
質問読んでると
同時実行してるとも思えなかったもんで まともなOSのメモリマッピングならデマンドページングするだろ MinGW
> objcopy -h
> libintl-8.dll がねーぞゴルァ!
よそから持ってこなきゃだめなん( ゚д゚)? しばらく前にMinGW更新したら、同じようにそのDLLでエラーになったな。
古いアーカイブファイルから復帰させたけどどうやるのが正しいのやら。 なんかgitに入ってたからそこからコピったら動いた。
>>16
よくわかんないよね そんなことよりもお前らmsys2 + pacmanは使ったか?
あれはいいものだ ディレクトリを選択して右クリックの 送る から cygterm+putty を開くにはどうすればいいのでしょうか? cygwinでは npm init がエラーになるんだな
ちょくちょく独特なトラブルが起こるからいまいち使いにくい msysはなんか一時期まともにインスコできない時期があったので、
cygwin64にcygwin, cygwin32, mingw32, mingw64のコンパイラ入れまくりに落ち着きつつある。
結局windwosネイティブのdll使うにはmingwじゃないとダメだしクロスコンパイルしまくりでやはり面倒ではある。 x265をコンパイルできるFFmpegをビルドするためにMinGW + MSYSを以下のサイトからダウンロードして
Windows7に入れました。
http://xhmikosr.1f0.de/tools/msys/
MSYS_MinGW-w64_GCC_492_x86-x64_Full.7z
早速x265のコンパイルをしようと以下のサイトを参考にしたのですが、
http://qiita.com/pb_tmz08/items/29165f4c3ef9bc4285ab
hg, cmakeが必要とのことです。(Linuxには疎いのでhgやcmakeがどういうプログラムなのかいまいち分かりませんが)
デフォルトのMinGW + MSYSにはhgやcmakeは含まれていないようです。
hgやcmakeを使えるようにするにはどうしたらいいでしょうか? ありがとうございました。おかげさまで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をフォルダーごと消去ましたでありんす ただの誤検知じゃないか!
少しは内容読んでから書き込め