- 1 名前:デフォルトの名無しさん [2011/05/06(金) 00:25:16.09 ]
- Windows上で動作するフリーの開発環境 CygwinとMinGWに関する相談スレッドです。
過去スレ: Cygwin + MinGW + GCC 相談室 Part 5 hibari.2ch.net/test/read.cgi/tech/1269400706/ Cygwin + MinGW + GCC 相談室 Part 4 pc12.2ch.net/test/read.cgi/tech/1221233882/ cygwin + mingwn + gcc 相談室 Part3 pc11.2ch.net/test/read.cgi/tech/1177944767/ cygwin + mingwn + gcc 相談室 Part2 pc11.2ch.net/test/read.cgi/tech/1126103347/ cygwin + mingwn + gcc 相談室 pc8.2ch.net/test/read.cgi/tech/1058134693/ 関連サイト: Cygwin www.cygwin.com/ MinGW www.mingw.org/ 関連スレッド: GCCについて part9 pc12.2ch.net/test/read.cgi/tech/1246059290/
- 412 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 09:03:51.31 ]
- cygwinについて質問です.
xwindowの起動とともに実行できるbatファイルのようなものって 作成できますか?
- 413 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 14:16:00.55 ]
- >>412
はい。xwindowを起動するバッチファイルを作ればできるかと。
- 414 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 16:14:37.94 ]
- .xinitrc
- 415 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 17:56:49.35 ]
- >>413
有難うございます. 実際にbatファイルでstartxwin.exeを呼び出すことで xwindowは立ち上がったのですが,コマンドを与えることができませんでした. batファイルでどのように指定したらいいのでしょうか.
- 416 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 17:58:45.81 ]
- .xinitrc
- 417 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 18:04:23.55 ]
- >>415
lmgtfy.com/?q=cygwin+.xinitrc
- 418 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 18:47:48.87 ]
- 自演 Uzeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
- 419 名前:デフォルトの名無しさん mailto:sage [2011/11/26(土) 23:48:31.72 ]
- .xsession
- 420 名前:デフォルトの名無しさん [2011/11/29(火) 16:58:59.67 ]
- 今のCygwinって64bitでも使えるみたいなんですけど,メモリ16GBとか使うことは可能でしょうか?
- 421 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 17:30:25.00 ]
- 64bitネイティブで動いていて使えない理由を教えてくれないか?
一応OS側で制限はあるようだけど、それはCygwinのせいじゃない
- 422 名前:デフォルトの名無しさん mailto:sage [2011/11/29(火) 23:07:15.41 ]
- >>420
不可能
- 423 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 06:21:28.63 ]
- 64bit版のcygwinじゃなくて32bit版が64bitWindows7の上で動いてる
- 424 名前:デフォルトの名無しさん [2011/12/01(木) 00:02:11.68 ]
- へえ
- 425 名前:デフォルトの名無しさん mailto:sage [2011/12/01(木) 23:06:26.54 ]
- そこは WoW!! だろ(64)
- 426 名前:デフォルトの名無しさん [2011/12/04(日) 13:20:45.91 ]
- cygwin gccでコンソールの対話形式のプログラム作りたいんだけど
どうすればいいの? 入力全部しないと出力してくれないです(行番号関係なしに出力の前に入力が来てしまいます)
- 427 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 13:22:22.15 ]
- ncurses
- 428 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 13:22:46.98 ]
- >>426
fflush(stdout);
- 429 名前:デフォルトの名無しさん [2011/12/04(日) 13:27:18.08 ]
- ありがとうございます!
- 430 名前:デフォルトの名無しさん mailto:sage [2011/12/04(日) 22:21:36.83 ]
- |....,,__
|_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
- 431 名前:デフォルトの名無しさん [2011/12/07(水) 22:40:37.50 ]
- ちょっとスレ違いかもだけど、MinGW/g++でDLL作ってるんだけど、dllの難読化/
暗号化みたいなツールあったら教えてほしい。できればフリーで。
- 432 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 22:47:30.68 ]
- 激しくスレ違い
- 433 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 22:54:07.03 ]
- DLLになってる時点でバイナリだから暗号みたいなもんじゃないのか・・・
- 434 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 23:01:34.64 ]
- 質問スレいってきま。
- 435 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 11:37:13.20 ]
- UPX
- 436 名前:デフォルトの名無しさん [2011/12/08(木) 11:59:42.38 ]
- upx -d で元に戻るので無意味...
- 437 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 12:04:28.97 ]
- なら自分で作れよ
この板はツール探す場じゃなくて 自分でプログラム書くひとの板
- 438 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 12:07:11.45 ]
- 自治厨乙。
- 439 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/08(木) 12:24:21.68 ]
- >>431 .netshrink
www.pelock.com/
- 440 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 12:35:37.70 ]
- 鍵なしで実行するなら
どうせ実行時に展開されるから無意味だろ
- 441 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/08(木) 12:38:06.44 ]
- >>439 .netshrinkは.net専用。
telockもダメ。burneyeもダメ。shivaもダメ。 全部解読されている。自分で改造するのが一番。 UPXはソース公開。
- 442 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 12:53:18.04 ]
- >>440
鍵ありでもおk。 >>441 UPXは弄るとGPL感染しちゃうんじゃない?
- 443 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 18:31:20.65 ]
- GPL広めろよ
- 444 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 19:30:24.13 ]
- >>443
おまかせします。
- 445 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 23:28:50.76 ]
- 任せとけい!
- 446 名前:デフォルトの名無しさん mailto:sage [2011/12/09(金) 02:15:31.46 ]
- ここまでおれのじえん
- 447 名前:デフォルトの名無しさん mailto:sage [2011/12/10(土) 00:21:02.15 ]
- MinGW/g++でDLLを作って配布したいのだけど、素のWindowsで動くように
するにはどうすればいいの? % g++ hoge.cpp -shared -static -o hoge.dll じゃだめ?
- 448 名前:片山博文MZ ◆0lBZNi.Q7evd [2011/12/12(月) 11:10:31.61 ]
- >>447 dlltoolを使え。
- 449 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 11:15:41.81 ]
- >>448
すまん、聞きたいのはライセンス関係の話。 -staticしてlibstdc++とかリンクされると配布NGになったりしない?
- 450 名前:片山博文MZ ◆0lBZNi.Q7evd [2011/12/12(月) 11:25:24.44 ]
- >>449
www.wdic.org/w/TECH/libstdc%2B%2B
- 451 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 11:25:49.08 ]
- で、もしそうならMinGWで必要なDLLはどうやって入手してもらうのがいいのかと。
(素人さんに)
- 452 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 11:28:05.34 ]
- >>450
その類の記述は少しだけみつけたんだけど、staticリンクでまったく全部 リンクされた状態でOKてことでいいの? .dllを使うための.aだけがセーフってことではなく。
- 453 名前:デフォルトの名無しさん [2011/12/12(月) 12:34:37.39 ]
- gcc.gnu.org/onlinedocs/libstdc++/manual/license.html#manual.intro.status.license.gpl
GPLv3 + GCC RUNTIME LIBRARY EXCEPTION.
- 454 名前:デフォルトの名無しさん [2011/12/12(月) 12:40:03.74 ]
- www.wdic.org/w/TECH/libc%2B%2B
GCC(G++)のライブラリはlibstdc++だが、これはGPLv3であり、GPL離れが加速する中、もはや採用することができない。 GPLv2ライセンスで提供されるものはGCC 4.2.1のlibstdc++までだが、いつまでもこれを採用し続けることも難しいのが現実である。
- 455 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 12:59:24.63 ]
- んー、MinGW/g++で-sharedで確認すると、
LIBSTDC++-6.DLL LIBGCC_S_DW2-1.DLL の2つに依存してるようなんだけど、どう配布するのがいいのか教えてくれw (GPLにしたくない、利用者は素人さん)
- 456 名前:714@C++相談室 part92 mailto:sage [2011/12/12(月) 15:35:18.23 ]
- 誘導されました。
ttp://hibari.2ch.net/test/read.cgi/tech/1320339482/714 について、MinGWの規則の範囲内でわかれば教えてください。 iconvについても確認してみたところ、 bin/iconv.dll lib/iconv.lib lib/iconv_a.lib となっており、libxmlと似ていました。「_a_dll.lib」はありませんでしたが…。 よろしくお願いします。
- 457 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 15:39:14.42 ]
- 何故VC++の話をここに持ってくるんだ
- 458 名前:片山博文MZ ◆0lBZNi.Q7evd mailto:sage [2011/12/12(月) 15:43:40.84 ]
- *_a.libは、staticライブラリ。
tinyxmlの方が小さくて使いやすいかもしれない。
- 459 名前:デフォルトの名無しさん [2011/12/12(月) 15:59:20.57 ]
- Windowsで使うのは骨だと思うけどなあ。
何かをするたびにエンコーディングの変換をするより、読むとき一度だけ 変換した方が効率がいいし、手間も少ないし。 BAD_CASTってあったと思ったけど、ほんとにBAD CASTだからね。 使えると思わないほうがいい。 つかたらいいなって思うのはよくわかるんだけど。
- 460 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 16:03:43.46 ]
- >>456
libxml2.libはlibxml2.dllのインポートライブラリ 実行時にlibxml2.dllが必要になる libxml2_a.libはstaticライブラリ 実行時にlibxml2.dllは不要 libxml2_a_dll.libもstaticライブラリ 実行時にlibxml2.dllは不要 libxml2_a.libとの違いはxmlDllMain(ビルド環境の際を吸収するための薄い皮)というものが含まれている dllを作成するときにはこちらを使うのが望ましい 大したことやらないならrapidxmlがオススメ
- 461 名前:456 mailto:sage [2011/12/12(月) 16:45:06.56 ]
- >>457
すみません。vc++依存の話だとすら知りませんでした。 >>459 他に使えるライブラリを探すことに疲れてしまいました。 >>458 >>460 rapidxmlは確かに使いやすかったです。tinyxmlは記憶があるので調べたか試したと思います。 どうしても、属性の値をxpathで取得する必要があって、最初に使えるようになったのがlibxmlでした。 現在は、dllを使って動いているのですが、静的リンクにしたくて調べていました。 こちらについても方法をご存知であれば教えていただきたいです。 調査に疲れてlibxmlをつかうことにしたときと同じように挫折しそうです。
- 462 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 17:27:10.13 ]
- >>461
xpathかぁ それならpugixmlがオススメ
- 463 名前:456=461 mailto:sage [2011/12/12(月) 18:57:05.07 ]
- >dllを作成するときにはこちらを使うのが望ましい
ありがとうございます。 こちらも静的リンクだったとは…。 差分をとってみるとかなり似ていたので、最適化が面倒だったのかな? と見当違いな妄想をしていました。 逆に、「_a.lib」が必要になる場合ってどのような場合なのでしょう? >>462 「pugixml」しらべてみます。 なるべく、実行ファイルのみでアプリの形にしたいので、静的リンクを使いたいのですが、 「_a」付きの「iconv_a.lib」「libxml2_a.lib」を使うにはどうすればいいのでしょうか? リンクするライブラリを「libxml2_a.lib」→「libxml2_a.lib」と変えてみて動かなかったのは、>>456に書いたとおりです。 と書き込もうと思って、もう一度ビルドして出力を眺めていると、 「MSVCRT.lib」と「LIBCMTD.lib」とが競合している、とのこと。D…?→ぐぐる。 リリースとデバッグが混じってる?いいのか?→Releaseビルド→正常終了 ( Д ) ゚ ゚ 「pugixml」の後に調べてみます。
- 464 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 18:57:49.45 ]
- ×リンクするライブラリを「libxml2_a.lib」→「libxml2_a.lib」
○リンクするライブラリを「libxml2.lib」→「libxml2_a.lib」
- 465 名前:463=464 mailto:sage [2011/12/12(月) 19:02:37.52 ]
- あ、うそでした、スレ汚し申し訳ありません。
リリースビルドのリンクが「libxml2.lib」になっていただけでした。
- 466 名前:デフォルトの名無しさん [2011/12/12(月) 19:07:25.38 ]
- だけだったね
- 467 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:11:14.38 ]
- いつまでVC++限定の話続けてるんだよ
- 468 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:35:19.90 ]
- ↑の話ってVC++の話なの?
Eclipseでc++書いてるのだけど、boostを落としてきてビルドして使う際に、 〜.a 〜.dll.a ってのを 〜.lib 〜.dll.lib にしないとならないのって何で? 気にしたこともなかった。
- 469 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:43:33.73 ]
- > visual c++でXMLを使いたかったため、windows用のlibxmlというライブラリを落として
- 470 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:53:40.13 ]
- VC++でも
#pragma comment(lib, "〜.a")とかつけとけば実行は出来るんじゃあねーかな ていうか質問者の人は\win32フォルダ配下のMakefile.msvcを使ったのだろうか?使ってないに100ペリカ
- 471 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 19:56:57.99 ]
- あー、わかった。msvc用のライブラリのバイナリじゃなくて、他のコンパイラでビルドしたバイナリを使ってんだな
そりゃー動かねーわ
- 472 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 20:01:54.62 ]
- ハズレ
- 473 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 20:14:27.02 ]
- てかよく見たらもう質問終わってたのね
- 474 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 20:18:37.13 ]
- そんなことより>>455教えてくれよー
static linkして配布すると問題?
- 475 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:01:15.37 ]
- 馬鹿には無理
- 476 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:23:40.68 ]
- >>455
答えがあるとは限らないけど、 Licensing Terms | MinGW www.mingw.org/license MinGW-users - Conflicting libstdc++-6.dll requirements, and licensing mingw-users.1079350.n2.nabble.com/Conflicting-libstdc-6-dll-requirements-and-licensing-td6160814.html
- 477 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:40:58.70 ]
- >>475
そんな、自己紹介しなくとも。
- 478 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:03:54.93 ]
- >>455
libstdc++とlibgccにはGCCのランタイムライブラリに関する例外規定が適用される。 www.gnu.org/licenses/gcc-exception.html www.gnu.org/licenses/gcc-exception-3.1-faq.html でも英語だからよくわかんね。
- 479 名前:デフォルトの名無しさん [2011/12/13(火) 06:57:24.94 ]
- 英語でもよくわからないよ。
一応、ヘッダーのリンクオーケー、商用オーケーって書いてはあるんだけど、 何がオーケーなんだかいまいち説明がはっきりしない。 これ書いた本人もまだ決めてないんじゃないの? 細かい部分は、訴訟起こす時に決めますみたいな。
- 480 名前:デフォルトの名無しさん [2011/12/13(火) 10:57:37.41 ]
- dllwrap について教えてください。
windows7 64bit環境で使用したいのですが、ヘルプを見ると --target に指定できるのは、i386-cygwin or i386-mingw32 しかないようなのですが、64bitの場合でも i386-mingw32 とすれば問題ないのでしょうか? それとも 64bit用の dllwrapがどこかにあるのでしょうか? OS : windows7 64bit MinGW :mingw-w64-bin_x86_64-mingw_20101002_4.5_sezero.zip MSYS :MSYS-1.0.11.exe
- 481 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 11:08:12.33 ]
- >>480
projectzero-swb.blogspot.com/2009/08/windows-7-x64mingw-x64.html
- 482 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 19:33:11.78 ]
- testes
- 483 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 14:25:34.43 ]
- >何がオーケー
コードの配布以外何がある?
- 484 名前:デフォルトの名無しさん [2011/12/14(水) 15:28:23.77 ]
- >>483
うん
- 485 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 05:00:32.59 ]
- MinGW32でextern "C"で定義してある構造体を返す関数が
gendefでdefを作ると@4と関数のあとについていて(他の関数には付いていない) それからlibを作るとその関数だけVC++からリンクできないのですが なにかありますか
- 486 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 08:26:23.55 ]
- struct の値返しは mingw と msvc で互換性がない。
- 487 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 14:23:52.12 ]
- >>485
//test.h #pragma once #ifdef __cplusplus extern "C" { #endif struct Data{ int a,b; }; struct Data getData(); #ifdef __cplusplus } #endif //test.cpp #include "test.h" struct Data getData() { struct Data d = {123, 456}; return d; } //use.cpp #include <stdio.h> #include "test.h" int main() { struct Data d = getData(); printf("d.a=%d d.b=%d\n", d.a, d.b); return 0; }
- 488 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 14:26:26.14 ]
- gcc -shared -o test.dll test.cpp
gcc -o usegcc.exe use.cpp -L. -ltest gendef test.dll lib /def:test.def /machine:x86 /out:test.lib cl /Fe"usevc.exe" use.cpp test.lib usegcc.exe usevc.exe うちの環境では問題ないなぁ
- 489 名前:485 mailto:sage [2011/12/15(木) 15:35:19.51 ]
- >>488
こうするとダメでした。 $ cat test.h #pragma once #ifdef __cplusplus extern "C" { #endif typedef struct { float v[4]; } data_t; data_t getData(int a, int b, int c); #ifdef __cplusplus } #endif $ cat test.cpp #include "test.h" data_t getData(int a, int b, int c) { data_t d; d.v[0] = (float)a; d.v[1] = (float)b; d.v[2] = (float)c; d.v[3] = (float)0; return d; } $ cat use.cpp #include <stdio.h> #include "test.h" int main() { data_t d = getData(1, 2, 3); printf("d.a=%f d.b=%f\n", d.v[0], d.v[1]); return 0; }
- 490 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 16:11:55.94 ]
- >>489
gcc -shared -o test.dll test.cpp -Wl,--output-def,test1.def gcc -o usegcc.exe use.cpp -L. -ltest lib /def:test.def /machine:x86 /out:test.lib cl /Fe"usevc.exe" use.cpp test.lib や gcc -shared -o test.dll test.cpp gcc -o usegcc.exe use.cpp -L. -ltest impdef test.def test.dll lib /def:test.def /machine:x86 /out:test.lib cl /Fe"usevc.exe" use.cpp test.lib ならいけるのでgendefの問題かもね
- 491 名前:デフォルトの名無しさん [2011/12/16(金) 22:18:26.50 ]
- かもね
- 492 名前:デフォルトの名無しさん [2011/12/18(日) 23:15:42.83 ]
- だね
- 493 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 20:11:37.95 ]
- /mingw32/bin/ld.exe: cannot find -lstdc++
このエラーはどうやったら直りますか?
- 494 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 21:47:09.64 ]
- g++じゃなくてgcc使ってないか?
- 495 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 09:03:27.32 ]
- うん
- 496 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 10:12:02.61 ]
- こ
- 497 名前:デフォルトの名無しさん [2012/01/05(木) 19:31:41.76 ]
- ふう
- 498 名前:デフォルトの名無しさん mailto:sage [2012/01/21(土) 16:31:23.43 ]
- うんこしたいんですけど。便所どこですか
- 499 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 17:04:42.88 ]
- cygwin 1.7.xってDOSモード無いの?
- 500 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 17:18:47.05 ]
- DOSモード?
- 501 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 17:44:11.08 ]
- >>500
よく見たら、書いてありました。すいません。 toro.2ch.net/test/read.cgi/unix/1268282846/14
- 502 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 10:41:28.34 ]
- MinGW側でmallocしたポインタをVC++側でfreeしたり
FILE*を受け渡したりできるんでしょうか? できないと思うんだけど、msvcrtを使っているというのはできるという意味でしょうか?
- 503 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 11:14:22.99 ]
- ためだろ
解放用の関数なり自作スマポなりで対応しろ クラスならコンストラクタデストラクタをprivateにしてstaticメソッドかfriendしてる関数からしか生成、破棄できないようにするのもあり
- 504 名前:502 mailto:sage [2012/02/01(水) 11:27:47.34 ]
- どうもmsvcrtでも71や80など違いがあるらしく、そのあたりの問題らしい。
mallocしたポインタを返すからそっちでfreeしろって設計のライブラリを撲滅したい。
- 505 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 11:29:19.63 ]
- >>503
mingwfreeというmingw側の関数でfreeするだけの関数が入ったDLLを作って対応していたんだけど 本当にこれ必要なのかなって疑問でした。
- 506 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 11:41:07.39 ]
- >>502
例えばMinGWのgccでコンパイルしたobjをMSVCのclでコンパイルしたobjにリンク した場合は、可能だよ (ただし、コンパイラサポート用の特殊なobjやlibを別途リンクする必要が しばしば生じるし、C++の場合は両者のABIにそもそも互換性がないのでダメだ) そうではなくて、MinGWで作ったDLLをMSVCで作ったexeから利用するシナリオを 考えているのなら、ダメ MSVCに閉じた世界であっても、msvcrt.dll, msvcr70.dll, .... msvcr100.dllや そのデバグ変種はすべて互換性がなく、exeとDLLが同じランタイムDLLを 利用しているのでない限り、そういうことは出来ない(それぞれ別のCランタイムを ロードしてメモリに保持する形になる) 今のMSVCはデフォではmsvcrt.dllとリンクするようになっていないので 自動的にダメということになるよ
- 507 名前:506 mailto:sage [2012/02/01(水) 11:43:03.46 ]
- ちなみにC++が不要なら、MSVCでmsvcrt.dllとリンクするようにすることは一応可能
WDKを入れて、そちらのincludeとlibを使うといい ただ色々落とし穴もあるし、事実上(少なくともモダンな)C++は使えない ネットで検索すると色々情報が得られるはず
- 508 名前:502 mailto:sage [2012/02/01(水) 12:13:51.23 ]
- >>506
objも互換性があるのか。 DLLにしないとVC++側から使えないと思っていました。 ちなみにC++は不要でCだけでいいです。 >>507 逆にMinGW側でmsvcrt80などにリンクするようにビルドすることもできるらしいのですが MSVC側のCRTのバージョンが上がっていきそうなので、 mallocしたポインタを返してこっちでfreeすることを要求してくるMinGW側のライブラリ(DLL)があって 僕が作っているわけではないオープンソースのライブラリなのでできればコードには触りたくないけど MSVCから使いたい場合は、 MinGWのDLLをビルドしたのと同じバージョンのfreeを単体のDLLにしてその関数でfreeするのがいい方法でしょうか。
- 509 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 13:17:19.87 ]
- たぶんそれで大丈夫だけど、試したことはないな
そのオープンソースのライブラリが一応Windowsをサポートしているんなら DLL boundaryを超えた場合の問題について開発者に説明して libfoo_free()のような関数を入れてもらうのが本来は望ましいんじゃないの objは互換性あるよ、少なくとも32bitでは gccもwin32ターゲットの場合はCOFFを吐くし、fopenやmallocみたいな関数への 参照はどっちでコンパイルしたとしても最終的にリンク時に解決されるので そのタイミングでリンクされるCランタイムが使われることになるわけだ x64だとどうだったかな……x64のABIは確か結構ややこしいことになってるんだよな
- 510 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 16:32:47.61 ]
- >>509
今そうしているので動いてはいるんだけど もっと普通の方法がないのかなと思ったのです。 どうもです。
- 511 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 16:49:08.70 ]
- LoadLibraryしてGetProcAddress(msvcrtdll, "free")では?
- 512 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 17:37:53.09 ]
- msvcrt.dllが(mingwによって)間接的にプロセスのメモリ空間にマップされているなら
LoadLibrary()の代わりにGetModuleHandle()でもいいね
|

|