- 1 名前:名無しさん@お腹いっぱい。 [2005/09/22(木) 20:29:34 ]
- UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
過去スレ(プログラム技術板) Part6 pc8.2ch.net/test/read.cgi/tech/1116908090/ Part5 pc8.2ch.net/test/read.cgi/tech/1105723117/ Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/ Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/ Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/ Part1 pc2.2ch.net/tech/kako/992/992057422.html Part3ミラー makimo.to/2ch/pc5_tech/1085/1085930894.html Part2ミラー makimo.to/2ch/pc5_tech/1055/1055110889.html 関連スレ Cygwin使っている人いますか? その14 (UNIX板) pc8.2ch.net/test/read.cgi/unix/1107587275/ Cygwin使っている人いますか? 3 (Windows板) pc8.2ch.net/test/read.cgi/win/1090131123/ 関連板 Linux板 pc8.2ch.net/linux/ プログラム技術板 pc8.2ch.net/tech/
- 503 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/02(土) 17:13:52 ]
- >>502
「HOGE型またはFOO型」というのが、2種類だけじゃなくて10種類くらいあったら template本体以外に void func(HOGE arg) とかを全部列挙するのが すごくダサイんですが。 あと、本来の関数名以外に funcHOGEFOO()という関数名をつけなければいけないのも 名前がぶつかるかも知れないし美しくない。
- 504 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/02(土) 17:18:14 ]
- なんで人にコード書かせて後から条件増やして文句つけるの?
そういう遊びなの? アホなの?
- 505 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/02(土) 17:19:35 ]
- >>503
何がしたいのかわからんが、ごちゃごちゃ言わずにさっさと boost::enable_if で好きに片付けろよ。
- 506 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/02(土) 17:21:22 ]
- アホなんだろ。
- 507 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 00:15:37 ]
- どうしてこんなことに
- 508 名前:名無しさん@お腹いっぱい。 [2009/05/03(日) 10:24:12 ]
- 同じコードが、Cだとコンパイルできるけど、
C++だとエラーになる。 struct A { int i, j; }; void hoge() { struct A a = { .i = 123, .j = 456 }; } 構造体を初期化したいのだが、メンバーの順序を気にしなくていいように メンバー名指定で初期化したい。 A a = {123, 456}; にすればC++でもOKになるけど、これだとメンバーの順序が変わった時困るから、 .i = や .j = の指定を入れたいのだが。 わかる方お願いします。
- 509 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 12:33:58 ]
- CでもC99じゃないとダメじゃないの?それ
- 510 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 13:03:34 ]
- C++だったら普通コンストラクタ
- 511 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 13:10:29 ]
- >>510
コンストラクタにしても、メンバの順序(コンストラクタの引数の順序)を考えなくて いいように >>508 の要求を満たすことはできないのでは? メンバの型が違えば方法はあるけど、型が同じならできないでしょ。
- 512 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 13:51:41 ]
- >>510
コンストラクタだと実行時に「代入」されるからプログラム的に無駄でしょ。 「代入」じゃなくて、静的データで初期化したい。 あるいはテーブルのようなconstデータを持ちたい場合、 コンストラクタじゃなくて「初期化宣言」したい。
- 513 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 14:37:22 ]
- >>512がオート変数の初期化を、「代入」以外の方法(静的データ?)で行う、
画期的に効率的な方法を開発したようです。
- 514 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 14:54:15 ]
- >>513
>>508 では確かに auto変数だが、 関数外に const static で持ちたい場合もあるしね。 そういう場合、struct member指定で順不同で初期化するのはどうするのかね? やっぱ C++じゃ無理なのかい?
- 515 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 16:14:47 ]
- なんかさー、そこまでこだわるなら
struct A a; a.i = 123; a.j = 456; でいいじゃんって感じ。 元々auto構造体変数のメンバ初期化自体邪道だったんだし。
- 516 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 16:23:57 ]
- >>515
すでに指摘されてるように、それだと「代入」。 質問は「初期化」の方法。 auto変数じゃなくて、staticの時、どうするよ?
- 517 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 16:30:14 ]
- C++の規格上出来ないんだから、どうしてもやりたいならC99で記述してリンクすればいい。
- 518 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 16:34:57 ]
- なんだ、できないのか。しょぼいな。
- 519 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 17:59:22 ]
- コンストラクタ的にしとかないとメンバ変数増えたときに困りそうだけど。
- 520 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/03(日) 23:59:36 ]
- >>519
まあこんなしょうもないところにこだわる人にそんなことが理解できるはずもなく。
- 521 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/05(火) 10:21:50 ]
- そういうエディタ内でのお遊びはム板でやればよろし。
>>517 >>520 で正解でてるからいうこた特に無いけれど それ以前に 基本は「ある仕様を覚えろ」じゃないかと思う。 「書き方」にこだわりがあるなら そのコーディングを無難にコンパイルできるマクロツール作ればいいまでのこと テキストレベルの問題だ。
- 522 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/05(火) 14:51:47 ]
- おいおい、途中から話の噛み合っていないバカ共が増えてるけど
元々の質問は、 「メンバの順序を気にしなくて良いように、メンバ名指定で初期化したい」 例:struct A a = { .i = 123, .j = 456 }; なんだろ? で、傲慢にも「同じコードをC++でも通るようにしたい」と… はっきり言えば>>509と>>517が全てで、この書き方だとC99でしか通らず そのままではC++0x準拠のC++コンパイラですら通らないわけだが 何を勘違いしたのか、初期化と代入の区別もついていないバカ共とか Designed Initializersの話してるのに、エディタ内でのお遊びとか言ってるバカが話をややこしくしてる 本当バカって救いようないな、分からないなら黙っていれば良いのに… 似たような疑問をもっていて、たまたまこのスレを訪れた人は、>>509と>>517以外の >>508からここまでのレスは、全くのゴミレスなので読み飛ばしてほしい
- 523 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/06(水) 13:33:15 ]
- X Window Systemのプログラミングの参考になる書籍
で現在も通用するものってどんな者が有りますか? 具体的にはC言語からXlibなどをつかってツールキットを使わずに プログラムを作成する方法を解説した書籍があればお教えください。 tclやgtkやqtの経験は有るのですが、ちょっとしたプログラムを 作るのにあまり重たくしたくないのでC言語で直接利用したく思います。
- 524 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/07(木) 10:40:39 ]
- >>523 書籍はしらないけれど
ttp://xjman.dsl.gr.jp/X11R6/X11/ ttp://www-yano.is.tokushima-u.ac.jp/~mituhara/software_e/ あとりを参考にしてみては?あとめぼしいportsのソースが参考になる。 ただxlibとSDLと使用メモリとか大してかわらんよ。 描画面も考えると xlib→cairo→pango ないしは SDL→cairo→pango とやっていくと軽くて学習効率が高く見栄えのする結果が得られると思う。 それと「コマンドとして呼び出して結果をもらう」とか 「perlやshを呼び出す」事も選択肢に入れるとコードと使用リソースが小さくできる。
- 525 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/07(木) 10:46:27 ]
- >>524でcairoを出しているのはxlibだときれいなテキストが書きにくいので
freetypeを叩くより楽だからの意味合いが強い。
- 526 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/05/07(木) 17:08:06 ]
- >>524-525
ありがとう御座います。 がんばります。SDLはいろんなOSで使えるようですね。 いろいろ勉強してみようと思います。
- 527 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/17(水) 09:35:24 ]
- >>523
亀レスだがそういう解説書なら Xアプリケーション・プログラミング1 Xlib編 しかし書籍の方が現在では流通していないかも。 どこかの図書館にはあるだろうからその場合は最寄りの図書館で取り寄せてもらって。
- 528 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/19(金) 17:16:58 ]
- 下図のように自己交差しているリージョンを、
┏━┓ ┃ ┃ ┗━╋━┓ ┃ ┃ ┗━┛ 交点で個別のリージョンに分けたいんですけど、 ┏━┓ ┃ ┃ ┗━┛┏━┓ ┃ ┃ ┗━┛ 簡便な方法ってないものでしょうか。よろしくお願いします。
- 529 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/06/19(金) 17:23:20 ]
- すみません、スレ違だったようです。取り下げます。
- 530 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 15:10:34 ]
- # ping -c 1 -t 10 www.yahoo.co.jp
って実行すれば以下のような結果が表示されると思うのだが PING www.yahoo.co.jp (124.83.139.192) 56(84) bytes of data. 64 bytes from f1.top.vip.ogk.yahoo.co.jp (124.83.139.192): icmp_seq=1 ttl=57 time=9.06 ms --- www.yahoo.co.jp ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 9.068/9.068/9.068/0.000 ms 平均値だけを出力させることってできますか? #ping -c 1 -t 10 www.yahoo.co.jp 9.068 って感じにです。
- 531 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 15:11:25 ]
- すみません、スレ違だったようです。取り下げます。
- 532 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 15:13:06 ]
- >>531
勝手に取り下げないで下さい
- 533 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 17:19:19 ]
- >>530
えっと、そういう機能を持った pingコマンドの別種を自分でプログラムしたい、 って質問だよな? pingのようにICMPを送受信するには、 SOCK_RAWを使ったソケットプログラムが必要だが、 その辺は理解してるのか?
- 534 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 17:26:55 ]
- 単にパイプで適当なワンライナーにつなげば済む程度の話じゃね?
- 535 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 17:32:39 ]
- >>534
それだとプログラミングじゃないからやっぱりスレ違い。取り下げなければならない。
- 536 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 17:58:32 ]
- >>533
muninで出力結果をグラフにしたいだけです
- 537 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 18:01:43 ]
- >>536
じゃあ、Xのプログラムも必要だな。 ツールキットは何を使う予定?
- 538 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 18:37:33 ]
- >>537
必要ねぇだろ?嘘教えるなよww
- 539 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/13(月) 18:40:19 ]
- ここはプログラミング質問すれだよ。
muninの出力みたいな表示を行なうプログラムを自作したいんだろ? pingのソースを参考にソケットプログラムとXのプログラムが必要だな。
- 540 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 13:14:14 ]
- グラフィックスにXのプログラムはいらないな。
グラフというのが「画像」であるならばcairoを使うのが定番 cairoで作ったコンテキストはファイルとして保存できる他 GDK,xlibのpixbuf、SDLみたいなメモリコンテキストから簡単に扱える。 ImageMagickもいいんだけれどcairoのが良いと思うね、 コマンドプロンプトのコントロールもpipe使ったりsytem使ったりで使うのは有りだから 無理に実装せずpopenとかで呼ぶのも有りだし perlやpythonでの実装という選択肢もある。 で>530 の場合は無理にICMPの使い方をマスターしないで perlの「``」かCのpopenでpingを使ってデータを取って ソートなり平均値を出すという部分をまず作ることが大事なんじゃないかな。 ping部分を作りたかったら別で作ればいいさ。
- 541 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 13:34:45 ]
- >>540
perlを使うと「スクリプティング」 (シェルスクリプトも同様) ここは「プログラミング」 よって、スレ違い。
- 542 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 19:03:06 ]
- >>541
スレ違いじゃないと思うけど。 別に何使ったっていいじゃん、こだわること無い。
- 543 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 02:10:39 ]
- アクションゲームプログラミングって本を参考に
プログラミングしようと思ってるんですけど ひとつ疑問が、 Directx SDKのバージョンが違うんですけど 最新版でも問題はありませんか?
- 544 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 08:13:33 ]
- この板では回答は得られません
- 545 名前:名無しさん@お腹いっぱい。 [2009/07/18(土) 14:10:53 ]
- まぁそう言わずに
>>543 君には無理
- 546 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/19(日) 21:14:09 ]
- >>541 プログラムの意味分かってないね、
- 547 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/19(日) 21:16:18 ]
- >>543 ここはUNIX板、最小公倍数はwine使用時のdirectXかSDL+OpenGL
アクションゲームは素直にFlashで作った方がいいんじゃない。 アスキーアートでも写真でもいいから とりあえずキャラ画像そろえるのが先決
- 548 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/19(日) 21:17:58 ]
- >>541 cairoもImageMagickもperlバインディングもあるけれど
Cでの実装は常識の範疇だよ。ちなみに、
- 549 名前:名無しさん@お腹いっぱい。 [2009/07/21(火) 20:21:55 ]
- すいませんちょっと質問させてください。
いま、データのインポートをする簡単なプログラムをCで書いているところなのですが、原因のよくわからないエラーが出てしまっています。 このあとfloat型ポインタのpにデータをいれていきたいのですが、何故かfloat *pのコメントアウトを外すと、 unnkoを二回出力したあとセグメンテーションエラーになるのです。コンパイルは通ります。 float *pを米アウトした状態だと普通に動きます。 float型以外の型の変数やポインタを用意しても同じようなエラーがでていまい、これ以上変数を増やせないんです。 開いてるファイルは8kぐらいの大きさだし、変数の数も多いわけではないのでスタックを食いつぶしてるようにも思えません。 誰か間違いに心あたりありませんか? ちなみにosはScientificLinux5.3でコンパイラはGNUの4.1です ↓ソースコードはこちら
- 550 名前:名無しさん@お腹いっぱい。 [2009/07/21(火) 20:24:24 ]
- #include <stdio.h>
#include <stdlib.h> int main(int argc,char *argv[]) { char *inbuf; int i,j; char c; FILE *fp; //float *p; printf("unnko\n"); if((fp = fopen(argv[1], "r")) == NULL ) { printf("ファイルオープンエラー\n"); exit(EXIT_FAILURE); } printf("unnko\n"); for(i=0;i<126;i++){ if( fgets(inbuf,128,fp)==NULL){ printf("%s Can't read\n",argv[1]); } printf("%s",inbuf); } fclose(fp); printf("\n"); return 0; }
- 551 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 20:30:54 ]
- >>550
char *inbufがタダのポインタのままで、メモリ確保してないのが原因。 //float *p; のコメントとかコメントアウトについては、 たまたまそれでメモリ配置が変わってたまたま動いたり動かなかったりしてただけ。 正しくは char inbuf[128]; でちゃんとメモリ確保しろ。
- 552 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 20:36:01 ]
- >>551
早いレスありがとう メモリ確保は既にやった気がするけど夢だったかもしらん。ちょっとやってみる
- 553 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 20:43:13 ]
- >>551
キターーーーーーーーーー ちゃんと動きました。ほんとありがとう
- 554 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 20:45:10 ]
- とりえあえず
char *inbuf = malloc(128); …fgets(inbuf,128,fp)… と char inbuf[128]; …fgets(inbuf,128,&fp[0])あるいはfgets(inbuf,128,fp)… の違いが分かるようになるくらいは勉強しなよ。
- 555 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 20:51:54 ]
- >>554
解決した後に蛇足なこと書くなよ。>>551 の回答者とは別人の人よ。 > …fgets(inbuf,128,&fp[0])あるいはfgets(inbuf,128,fp)… おいおい、FILE *fp; に対して &fp[0] って意味ないだろ。 (コンパイルすれば単に fp と同じになるにしても) 書きたかったのは &inbuf[0] じゃないのか?
- 556 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 00:37:06 ]
- >>530
スレちレス $ ping -c 1 -t 10 host | tail -1 |awk -F/ '{print $5}'
- 557 名前:名無しさん@お腹いっぱい。 [2009/09/04(金) 00:52:32 ]
- Linux の RAW ソケットで送信パケットをキャプチャし
ないのってどうすんだっけ? どっかのサイトで見たんだ けどキーワードが悪いのか見つからない…。
- 558 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/04(金) 12:09:44 ]
- libpcap使いなさい。
- 559 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/04(金) 12:13:41 ]
- すみませんが詳しい方のみ回答をお願いします
- 560 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/04(金) 18:21:06 ]
- 回答まだでしょうか?急ぎです。
- 561 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/04(金) 19:31:34 ]
- みんな自分が詳しくないということを自覚しているから何も
言わないコトにしたんだと思うよ。(ということにしておく)
- 562 名前:557 mailto:sage [2009/09/05(土) 00:33:12 ]
- >>560
> 回答まだでしょうか?急ぎです。 実際急ぎだったんだがお前は俺じゃないだろ(w キーワードは PACKET_OUTGOING だった。
- 563 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/10(木) 20:16:00 ]
- >>560
出てこいよ池沼
- 564 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/21(月) 18:30:40 ]
- すみませんが詳しい方のみ回答をお願いします
- 565 名前:名無しさん@お腹いっぱい。 [2009/09/22(火) 21:06:47 ]
- libhoge.so.* という共有ライブラリがあった時、
gcc -o prog prog.c -lhoge ってやると、progから libhoge.so.*に動的リンク(lddで確認)されますが、 prog.cで、実際にはlibhoge.so.*の関数をひとつも使っていなくても 動的リンクされた状態でコンパイルされてしまいます。 一方、libhoge.aという静的ライブラリがあって、 gcc -o prog prog.c libhoge.a ってやったような場合は、prog.cの中でlibhoge.aの関数をひとつも使っていなければ、 libhoge.aの中身は使われず、libhoge.aを付けずに gcc -o prog prog.c でコンパイルしたのと同じバイナリができて、 無駄になりません。 動的リンクの場合でも、関数を使っていないなら、 -lhoge を付けても結果的には動的リンクしないバイナリが作成されるように できませんか?
- 566 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 22:53:19 ]
- 使ってないなら -lhogeつけなきゃいいのに
- 567 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:05:07 ]
- >>566
じゃなくて、使うかどうかわからない場合でも、 -lhogeとか付けておいて、実際に使われなかったらリンクしないようにしたいんだが。 (別の関数から間接的に呼び出されたりして、ライブラリの関数を使ってるかどうか 簡単には判断できないことがある) 静的ライブラリ(libhoge.a)なら可能なのに、 動的ライブラリの場合のみ不可能なのは納得いかないんだが。 ldが、本当に関数を使ってるかどうかチェックするのをさぼってるとしか 思えないんだが、これバグじゃないの?
- 568 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:33:53 ]
- 何でバグって思うのか分からない。わざわざ -lhoge を付けてるのに
付けてないことにしてほしい、って方がワガママでしょ
- 569 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:35:59 ]
- 気に入らなくても、ldはそのように作られているのだから、不要なライブラリを
リンクしないようにするしかない。
- 570 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:41:42 ]
- >>569
じゃあ、なぜ ldはそのように作られたのか? 関数を(というかシンボルを)使ってるかどうかのチェックぐらい、 簡単にできそうなのになぜしないのか?
- 571 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:41:52 ]
- >>567
実行時までシンボル解決出来ないんだから、そのライブラリが 本当に呼び出されないかどうかは ld にも分からないんだよ。 だから ld は悪くない。
- 572 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:46:17 ]
- >>567
そんなことはない。 「シンボル解決出来ない」場合はちゃんと undefined symbol: hoge .. みたいなエラーが出るから、コンパイル時にも判断できるはず。
- 573 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:47:04 ]
- >>571
そんなことはない。 「シンボル解決出来ない」場合はちゃんと undefined symbol: hoge .. みたいなエラーが出るから、コンパイル時にも判断できるはず。
- 574 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:51:29 ]
- >>571
とりあえず、コンパイル時の判断で不要と思われるライブラリは (動的)リンクしないのをldのデフォルトにしておいて、 コンパイル時のシンボルレベルの判断では使っていないように見えて、 実際には実行時に使われるような特殊なライブラリの場合のみ、 --force-link みたいなオプションを新設して強制リンクさせればいいだろ。 デフォルトではシンボルを使ってなければリンクしないことにして。
- 575 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:54:54 ]
- バイナリパッケージでインストールされたコマンドとか見てると、
実際には使ってない動的ライブラリがリンクされてたりするね。 (C++とかXの関係のライブラリにそういうのが多い) そのソースのMakefileから、-lxxx を外してもコンパイルできたりする。 これって無駄だし、ldが適切にリンク判断してれば もっと効率の良いバイナリができていたはずなのに。
- 576 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/22(火) 23:56:33 ]
- リ1「こいつ使ってないライブラリをリンクしようとしてるぜ」
リ2「あちゃー、何だそれ」 リ1「でもわざわざ余計な事をするんだから何か考えがあるんだろう」 リ2「リンクする必要が無いなら最初から省けば良いからな」 リ1「仕方が無い、面倒くさいけどリンクしてやるか」 リ2「これでバグとか言われたら最悪だな」
- 577 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:00:37 ]
- >>576
同じソースでも環境によってライブラリが必要だったり不要だったりする場合がある。 そういう場合、共通ソースでは念のため -laaa が付けられている。 リンカーが「使ってないライブラリをリンクしようとしてる」と判断できるなら それをリンクしないようにするべき。
- 578 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:01:28 ]
- >>573
それはライブラリが足りない場合だろ。 ちゃんと場合分けして考えようぜ。 シンボルが呼び出されないかどうかは保証出来ないんだよ。 別の動的ライブラリから呼び出されるかもしれないし、 動的ライブラリは差し替え可能だから何でもありだ。 ツールは人間様の指示を無視する事は出来無いの。
- 579 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:02:19 ]
- >>576
それと同じ理屈を libxxx.a に適用すると論理破綻。
- 580 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:05:06 ]
- >>578
だから「保証はしなくてよい」 ldのデフォルト動作として、リンクしないようにして、 それでまずい場合(レアケース)のみ、--force-linkみたいなオプションで 強制リンクすればいいだけ。 実際、知らず知らずのうちに使ってるバイナリが 不要なライブラリをリンクしてるんだよ。 ldの動作をちょっと改良するだけで、 それらがすべて改善できるだろ。
- 581 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:07:46 ]
- >>579
動的と政敵の違いを考えることが無いお前の頭の中が破綻してる。
- 582 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:08:33 ]
- >>573
・それは、ライブラリが足りてない事がわかる事を意味していて、 ライブラリが余分だという事は意味してないよな。 ・ldがそのようなライブラリをリンクしないと、dlsym(NULL, ...)が困るかもしれない。
- 583 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:09:13 ]
- >>578
場合わけじゃない。同じ場合だ。 「ライブラリが足りない場合」ではない場合はリンクしない。 で問題ないだろ。 別の動的ライブラリから呼び出されるような場合でも、 ld時にそのライブラリも -lxxx2 で指定するのだから、 結局ldがすべて判断できる。 dlopen()の場合は考慮しないということで。
- 584 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:09:30 ]
- >>580
残念ながら改悪だと思われ。
- 585 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:10:24 ]
- >>583
考慮しろよww
- 586 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:11:14 ]
- >>579
だから場合分けして考えろって。 違う物に同じ理屈で挑むなよ… もし良いアイデアだと思うなら、自分で実装してみな。 俺等は使わないけど、君みたいな人が他にもいるかもしれん。
- 587 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:11:24 ]
- >>582
dlopen()するようなプログラムなら、 そのプログラムの「実行時の責任」で必要なライブラリを プログラムでロードするから、今の議論とは関係なし。(考えなくて良い)
- 588 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:12:20 ]
- >>587
dlsym(NULL, ...)って書いただろ。dlopenしないんだよ。
- 589 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:13:26 ]
- >>584
じゃあ、譲歩して、 ldのデフォルトは従来のままとして、 --no-link-unneeded みたいなオプションを付けたら、 不要なライブラリをリンクしない、ということでいいだろ? どうしてそういうオプションが ldにないのか?
- 590 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:16:00 ]
- >>588
どっちでも、今の議論では同じこと。関係ない。
- 591 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:19:11 ]
- 何でもかんでも『同じこと』なんだな。
ちょっと場合分けしたらスッキリ理解出来るのに… まぁ、ライブラリをロードする時間とメモリが惜しいなら、 自分が使うライブラリくらい把握しとけって事だな
- 592 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:24:21 ]
- >>590
関係有るだろ、-lでリンクしたライブラリを参照するんだから。
- 593 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:27:50 ]
- --as-neededとかあるけど?
- 594 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:28:10 ]
- >>592
dlsym()とかを使わないような普通のプログラムで、 環境対応のため念のため付けられている -lhoge オプションを、 ldが適切に判断してリンクしないようにしたい。 という議論で、dlopen()/dlsym()等で事情がある場合は ldに --force-linkなどのオプション指定して対応すれば良い話で、 その --force-linkなどのオプションが必要になるプログラムについては 話の本題ではないので、結局 dlopen()/dlsym()等の件は関係ないということ。
- 595 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:30:35 ]
- >>589
お前の糞みたいな益の無いアイデアで作り変えた糞ソフトをldと呼ぶな
- 596 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:32:38 ]
- >>593
詳しい人登場。(正解) 「-lhoge付けたんだから絶対にリンクするべきだ」とか、 「実行時じゃないと判断できない」とか 質問者を叩いていた人、全員不正解。
- 597 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:34:37 ]
- >>595
つまり、現状の ldにすでに備わっている 「--as-needed」オプションは、 「糞みたいな益の無いアイデア」なんですね、わかります。 作り変えなくても、すでにそう作られてるんですが、、
- 598 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:41:49 ]
- >>597
だから、お前のアホみたいなアイデアで作り変えたゲテモンをldと呼ぶなと言ってるんだ。 作り変えないならldそれはそもそものldだ、普通にldと呼べゴミカス
- 599 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:43:36 ]
- >>597
へぇ、じゃあ現状のldはデフォルトで使ってないものをリンクしないんだね? 違うよね?お前の糞ソフトはldじゃないんだよ。
- 600 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:47:37 ]
- >>598-599
見苦しいぞ。 --as-neededオプションをすぐに答えられなかった奴は素直に負けを認めとけww
- 601 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:47:58 ]
- >>596
>「実行時じゃないと判断できない」とか これは正しいだろ。--as-needed が使えるのは プログラム側でシンボルテーブルを参照していない 限りにおいてのみだぜ。これも場合分けって奴だ。 当たり前だが GNU の ld 固有の機能だから環境依存に 注意して使ってくれ。
- 602 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 00:49:56 ]
- あー、ちなみに Mac OS X では使えない。
必要とされていないのか、何か問題があるのかは知らん。
- 603 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/09/23(水) 01:02:27 ]
- as-needed がデフォルトの動作でなくて、オプション付けないと有効にならない
あたりから察しようぜ
|

|