GCCについて part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://gcc.gnu.org
前スレ
・GCCについて
http://pc2.2ch.net/test/read.cgi/tech/1007731543/
関連スレ
・祝・GCC 3.0リリース
http://pc.2ch.net/test/read.cgi/unix/992942337/
0002名無しさん@Emacs
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGいいんだけど、ないかな?やっぱりMakefileを丹念に読んで
いかないとだめかな。
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGアプリ屋には違いが分からないと思います
0009デフォルトの名無しさん
NGNGgccのコンパイルのこと?
0010デフォルトの名無しさん
NGNGどうやらコンストラクタ・デストラクタと関連があるようですが…
0011無名λ式
NGNGhttp://www.globe.to/~oka326/archive/elf_doc_sgml_ja/elf_doc-3.html
これ読んでわからんとこあればもっと具体的に聞けや。んじゃ
001210
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/
0015デフォルトの名無しさん
NGNGint a, b, c, op;
op = 0;
__asm__ __volatile__ (
"cpuid;"
: "=b"(a), "=d"(b), "=c"(c) : "a"(op)
: "%eax", "%ebx", "%ecx", "%edx");
とやると
can't find a register in class `AREG' while reloading `asm'
といわれてしまいます。どうしてなんでしょう?
レジスタ指定を全て省略してやるともちろん動くんですが...
0016デフォルトの名無しさん
NGNGgccの asm書式ってさっぱりわからんよね。
マニュアル読んでもいまいちだし・・・。
まあ、がんばって。
0017デフォルトの名無しさん
NGNGcpuid は out: eax ebx ecx edx, in: eax だからそれだとまずい。
int a, b, c, d, op;
op = 0;
__asm__ __volatile__("cpuid"
: "=a" (a), "=b" (b), "=c" (c), "=d" (d)
: "0" (op));
でどーでしょ。
>>16
アーキテクチャ依存のことは info にはあんま書いてないから、Machine Desc
の章を読んで config/i386/i386.* とかを見るしかないと思う。
0018デフォルトの名無しさん
NGNG上記コードでも :"%eax","%ebx","%ecx","%edx"をつけると同じエラーが出ます。
それと "0" (op)ってなんでしょう?"a"(op) じゃなくて?
0019デフォルトの名無しさん
NGNG> 上記コードでも :"%eax","%ebx","%ecx","%edx"をつけると同じエラーが出ます。
out と clobber に同じレジスタを書けば、そりゃ矛盾してるからエラーになるよ。
> それと "0" (op)ってなんでしょう?"a"(op) じゃなくて?
The constraint `"0"' for operand 1 says that it must occupy the same
location as operand 0. A digit in constraint is allowed only in an
input operand and it must refer to an output operand.
0020デフォルトの名無しさん
NGNGmain(){}
↑これだけのコードで実行ファイルが200KBになるんだが、
なにか間違ってないか?
ちなみに、#include <iostream>を消しただけで10KBほどに収まる。
0021デフォルトの名無しさん
NGNGそれって、使っているプラットフォームが悪いんじゃないの?
NetBSD-1.6/i386 (gcc-2.95.3) だと、33KB にしかならん。
同じプラットフォーム上で、gcc-3.2.1 にすれば 7KB を切る。
0022デフォルトの名無しさん
NGNGstripした?
0023デフォルトの名無しさん
NGNGstrip後でやっと200KB。
002421
NGNG0025デフォルトの名無しさん
NGNGことってできる?
0026デフォルトの名無しさん
NGNG俺、UNIXの人なんだけど、Windows上ではCygwinよりMinGWの方が
ずっと好きなんよ。
0027デフォルトの名無しさん
NGNG>>21
単にデフォがstaticライブラリか共有ライブラリかの違いだと思われ
libstdc++を共有ライブラリにすれ
DLL hellに気をつける
0028デフォルトの名無しさん
NGNG以下の例はプログラムカウンタ、スタックポインタ、スタックフレームを差し替えています。
コンパイラすら通していないので、動作保証はありません。
jmp_bufの型定義は環境に依存するので、インラインアセンブラを使うのと大差ないかも知れません。
void create_new_task(void *stkbuf, size_t stksize)
{
jmp_buf env;
if(setjmp(env) == 0)
{
/* 新しい実行環境を作成する */
env[0].__jmpbuf[5] = (int)task_startup; /* プログラムカウンタ */
env[0].__jmpbuf[4] = (size_t)stkbuf + stksize; /* スタックポインタ */
env[0].__jmpbuf[3] = (int)NULL; /* スタックフレームポインタ */
/* 新しい実行環境へジャンプ */
longjmp(env, 1);
}
/* この行は実行されない */
assert(0);
}
0029デフォルトの名無しさん
NGNGこれやるとジャンプ元の環境やメモリはどうなってしまうんですか?
0030デフォルトの名無しさん
NGNGそのまま放置。task_startupが終るとcrash。
つーか[0].って書き方は珍しいな。
003128
NGNG即レスすると一日2chに張り付いているように思われそうですが偶然です。
setjmp(env)した時のenvを変更する前に保存しておいてlongjmp(env, 1)してあげれば、>>28のコードでassert(0)とされている所の実行を始めます。もちろん、この場合にはスタックは元の領域を使用することになります。
質問の内容とずれていますか?
スタックポインタを操作するという元質問から、non-preemptなマルチスレッドを実現しようとしているように思ったのですが・・・。
0032デフォルトの名無しさん
NGNG>>29は素朴な疑問ですた。サンクスです。
003328
NGNGマルチスレッドを実現するならば、task_startup関数は以下のように終了前に別タスクへディスパッチするようにします。
マルチスレッドで無いならば>>30氏の指摘通りにクラッシュしてしまいます。
void task_startup(void)
{
int task_ret;
/* ユーザー指示のタスクメイン関数を実行 */
task_ret = (*g_new_task_main)(g_new_task_arg);
/* タスクを終了して別タスクへディスパッチ */
task_exit(task_ret);
/* ここへは到達しない */
assert(0);
}
env[0].という書き方は、私の環境のjmp_bufの型定義によるものです。この辺りは各環境に従ってください。
0034デフォルトの名無しさん
NGNGその定義だと、元のスレッドがそのまま放置されそうなんだが。
というか、どうせバリバリ環境依存なんだから、エントリポイントとパラメー
タもスタックに突っ込んでtask_startup()に渡すように汁。
> env[0].という書き方は、私の環境のjmp_bufの型定義によるものです。この辺りは各環境に従ってください。
env->ってしないのかなとふと思っただけ。
003525
NGNGからgccでSP直接操作できる方法もあるかな? という質問です。
やっぱインラインアセンブラしか方法はないのかな。どこかで&_spみた
いな表記を見たような気もするんだが。
0036デフォルトの名無しさん
NGNG程度が限度と思われ。
0037無名λ式
NGNGということなら、*BSDのuser threadの元になったPMPthread、
http://www.humanfactor.com/pthreads/download-mit-pthreads.html
のmachdep/engine-$(CPU)-$(SYSTEM)-$(VERSION).cを参考にしてみては?
pthread/signal.cのcontext_switch()から、
machdep_save_state()が呼び出されています。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNGarはman、makefileはinfoを見るしかないんじゃないかなあ。
あと既存のファイルを気合入れて読むとだんだん書けるように
なる気がする。
0041デフォルトの名無しさん
NGNGmakeの作り方とMakefileの書き方は違うと思うんだよ。
0042デフォルトの名無しさん
NGNGそうかw
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGantの使い方とmakeのビルド方法を同時に解説してるサイトってあるのだろうか(w
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNGを調べたいのですが、gccでこれを行うにはどうしたらよいのでしょうか?
ちなみに環境はcygwinです。
0047デフォルトの名無しさん
NGNG誘導されてきた場合、その旨伝えたほうが良いらしいよ
とりあえず
WM_POWERBROADCAST / PBT_APMSUSPEND
などでサスペンドを検知して対処するとか
004847
NGNG0049デフォルトの名無しさん
NGNG-gオプションつけてコンパイルする
そこから先はgccじゃ無理だな
オレなら・・・そうだな、gdbあたりを使う
0050デフォルトの名無しさん
NGNG`__builtin_return_address (LEVEL)'
This function returns the return address of the current function,
or of one of its callers. The LEVEL argument is number of frames
to scan up the call stack. A value of `0' yields the return
address of the current function, a value of `1' yields the return
address of the caller of the current function, and so forth.
The LEVEL argument must be a constant integer.
これと nlist(3) なんかを使えばできそうだな。
0051デフォルトの名無しさん
NGNGNo manual entry for nlist
(´・ω・`)ショボーン
0052デフォルトの名無しさん
NGNGDebianの場合、libbfdはbinutils-devに。
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG何の話をしてるんだ?
Emacsはエディタだろ
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNGRTLでしょ。
gccにオプション -dr を付けてコンパイルすれば、
*.rtlというファイルが出てくる。
昔の(GNU C Compilerだけだった頃の)gccには無くて、
gcc2辺りから入ったんじゃなかったかな。
0057デフォルトの名無しさん
NGNG古いChangeLogには、1.17の記述があるが既にRTLがある。
0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNGキャッチしようとするとterminateしてしまうのですが、これって解決できないのでしょうか。
環境はgcc 3.2.2です。-fexceptionsつけても駄目でした。
JNIから呼びたいので共有オブジェクトを使わざるを得ないのですが、例外が使えなくて
困っとります。
0060デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1033795664/l50
に話題があったよ
0061デフォルトの名無しさん
NGNGgccのソース取って来いよ
006358
NGNG0064デフォルトの名無しさん
NGNGGCC RTL レジスタ転送言語(RTL)
http://www.sra.co.jp/public/sra/product/wingnut/gcc/gcc-j.html#RTL
0065デフォルトの名無しさん
NGNGGCC2.9じゃエラーがでないのに
GCC3.2じゃエラーがでて困ってるんですがどうしたらいいでしょう?
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG#include <locale>
#define LOCALE "ja_JP.eucJP"
int main(int argc, char** argv) {
std::locale::global(std::locale(LOCALE));
std::wcout << L"Hello,世界" << std::endl;
return 0;
}
とやっても表示されないんですが、バグですか?
clocale を include して ::setlocale(LC_ALL, LOCALE) してみても変わりません。
0068デフォルトの名無しさん
NGNG-Sしてデータ配置を見てみると、L"Hello,世界"がおかしいみたいです。
ファイルの保存をどんなコーディングシステムにしても
0069デフォルトの名無しさん
NGNGconfigure に --enable-c-mbchar つけた?
0071デフォルトの名無しさん
NGNG文字列リテラルが UTF-8 になりますね。
つい今しがた発見してちょっと感動しました。
ただし、使い物にならなそうな予感。
007267
NGNG--with-gcc-version-trigger=/home/username/gcc-3.2.2/gcc/version.c \
--host=i686-pc-linux-gnu \
--enable-languages=c,c++ \
--enable-c-mbchar \
--with-system-zlib \
--enable-shared \
--enable-thread=pthread \
--norecursion
0073デフォルトの名無しさん
NGNG大規模ソフトをコンパイルした後
メモリの使用量が100M近く開放されてないのは
「mallocが常に成功するとはかぎらない」
っていう奴と関係あるんですか?
0074デフォルトの名無しさん
NGNG何を見れば、
「コンパイルした後メモリの使用量が100M近く開放されてない」
と判断できるんだ?
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG何もしてないだけでは?
007867
NGNG#include <stdio.h>
#include <locale.h>
int main(int argc, char** argv) {
setlocale(LC_ALL, "ja_JP.eucJP");
fputws(L"こんにちわ、世界", stdout);
return 0;
}
これだとキチンと表示されます(ていうか、先に試せよ俺)。
libstdc++のビルドがうまくいってないようです。うーむ…。
gcc -v は ../gcc-3.2.2/configure --enable-c-mbchar --enable-languages=c,c++ --enable-thread=pthread
0079デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGロケールがサポートされたと言っても実際にはなかなか
組み込んでくれないんだね。
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNGリテラルとは限らないんじゃないか?
wostream がまともに動いてない状況じゃー wchar_t 周りは全滅だろう。
gettext 使ったからって解決するとは思えない。
0084デフォルトの名無しさん
NGNGこのまえ-O7してるメイクファイル見かけたんですが
-O7って有効オプションなんですかね?
0085デフォルトの名無しさん
NGNG関数に__Zってつくけどこれなんの略なの?
0086デフォルトの名無しさん
NGNG-O99でも通る。通るだけだが。
0087デフォルトの名無しさん
NGNGちゃんといける?
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG無いのでたいてい、
typedef char int8_t;
typedef short int int16_t;
typedef int int32_t;
typedef long long int int64_t;
みたいにする。当然CPUアーキテクチャ別に定義しなおして。
0091デフォルトの名無しさん
NGNGhttp://korea.gnu.org/manual/bmtp/onlinedocs/gxxint_1.html#SEC19
0092デフォルトの名無しさん
NGNGこんなもの一番最初に定義しておくべきだったのにな。
で結局>>89みたいなのがプロジェクトごとに乱立することに・・・
0093デフォルトの名無しさん
NGNGBCBLやBはbit長にベタベタ依存したプログラムが続出したから、
Cでは、そのカウンターカルチャーとしてユーザ定義の型からもbit長を追い出した。
行き過ぎの面もあるけど、当時のプログラマの民度においては意義があったと思う。
最近は、プログラマの責任、ということでいいだろうね。
ところで、C++ iostreamのfmtflagsは、当初"int"で何だかな─と思ってたけど、
enumにしてもいいようになったよね。libstdc++はenumになってる。
0094デフォルトの名無しさん
NGNG./configure につけるオプション(--enable-threads=posix みたいなの)
の解説してるサイトや文章ってないですか?
0095無名λ式
NGNG(http://gcc.gnu.org/install/configure.htmlと同じ)
./gcc/configure --help
./libstdc++/configure --help
などなど
0096デフォルトの名無しさん
NGNGサンクス。
GCC3.4そのままconfigureしてたら
かなり変なのができたので困ってた
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG無理でしょ
SSEがどういうものかわかってたそういう質問しないと思うが。
いちおgcc(cc1)には-msseオプションがある
gcc -msse hello.c
009997
NGNGgccではどうなのかなあと思って。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG多くは期待できないような。
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGそれ以前のはサッパリだめだった
i386系以外はどうだか知らない
0105デフォルトの名無しさん
NGNG../3.3/../../.. /usr/lib/crtendS.o /usr/lib/crtn.o
-Wl,-soname -Wl,libgcj.so.4 -o .libs/libgcj.so.4.0
/usr/apps/i386-unknown-netbsdelf1.6Q/bin/ld:
cannot open javax/naming/.libs/CommunicationException.o: Memory exhausted
collect2: ld returned 1 exit status
javaのlibgcj.so.4.0のビルド中にこういったエラーが出てしまいます。
みなさんのところではちゃんとビルドできていますか?
0106デフォルトの名無しさん
NGNGulimitでひとつひとつ全ての項目のリソース制限を外したら
上手く行きました。しかし巨大ですね。。。これでもインタプリタ
よりは効率はいいのかな。
0107デフォルトの名無しさん
NGNG今のJavaのHotSpotはかなりのもんだぞ。
あと数年はgcjは趣味レベルだろう。
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG3.2.2 で -msse コンパイルしたもの。
元ソースはヒミツ(ていうかまだコード評価の段階)だが
__attribute__ (mode(V8QI))
とか
__builtin_ia32_xxx()
とか入りまくってる(w
インデント抜けまくりなので心して嫁
.L10:
movq %mm2, %mm4
pxor (%edx), %mm4
movq %mm3, %mm6
punpcklbw %mm4, %mm6
pextrw $0, %mm6, %eax
pxor (%ebx,%eax,8), %mm1
pextrw $1, %mm6, %eax
pxor 512(%ebx,%eax,8), %mm1
pextrw $2, %mm6, %eax
pxor 1024(%ebx,%eax,8), %mm1
addl $16, %edx
pextrw $3, %mm6, %eax
decl %ecx
pxor 1536(%ebx,%eax,8), %mm1
jns .L10
0110デフォルトの名無しさん
NGNGfloat foo(float a, float b, float c){return a + b * c;}
$ ./cc1 -O6 -fomit-frame-pointer -msse2 -mfpmath=sse
foo:
subl $12, %esp
movsd 32(%esp), %xmm1
mulsd 24(%esp), %xmm1
addsd 16(%esp), %xmm1
movsd %xmm1, (%esp)
fldl (%esp)
addl $12, %esp
ret
0111デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/projects/
0112山崎渉
NGNG0113デフォルトの名無しさん
NGNG0114bloom
NGNG0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG最近書いてないけど、昔これで勉強したよ
http://www-6.ibm.com/jp/developerworks/linux/010615/j_l-ia.html
0117デフォルトの名無しさん
NGNG最適化のオプションはどのようにすればいいでしょうか?
0118デフォルトの名無しさん
NGNGman gcc か gcc --help
0119デフォルトの名無しさん
NGNG117の環境がワカランが、とりあえずもまえがつこうてる
CPUのメーカが作ったコンパイラを金を出して買うことだ。
GCC使ってて最適化など当てにするな。
0120デフォルトの名無しさん
NGNG俺は
-O4
-mmmx
-msse
-march=i686
-funroll-loops
-fno-strength-reduce
-finline-functions
-frerun-loop-opt
-fschedule-insns2
-fomit-frame-pointer
-fmove-all-movables
ってやってる。文句あっか?
0121デフォルトの名無しさん
NGNGIntelのコンパイラ高いよ・・・・
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGローリスク、ハイリターン。
0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNGこれのことか? Windows用もLinux用も Free 30-day evaluation みたいだが。
http://www.intel.com/software/products/global/eval.htm
0127デフォルトの名無しさん
NGNGLinux用の体験版の隣に非商用版があるだろう?
0128デフォルトの名無しさん
NGNG略ではなく、「只」という字を分解したもの
0129デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/linux/1007024009/1-6
0130119
NGNGどうしても金がないなら、
GCCの最適化を自力で強化する事だな。
「究極」に最適化したいんだろ。
0131デフォルトの名無しさん
NGNGほうが早くなるよ。
0132デフォルトの名無しさん
NGNGつかわなきゃいい
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNG他にもいろいろ書いてるけど効果ある?
0135デフォルトの名無しさん
NGNG*.cも直した方が楽。
ちょっと凝った事やらせるとRTLじゃ書けない。
0136デフォルトの名無しさん
NGNG3までだけど、もっと大きい値を指定しても別にエラーになるわけじゃない。
0137デフォルトの名無しさん
NGNG最近は9だったか99まであります。
どう変わるかは知らんけど。
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNGってやると80386のアセンブリコードが出力されるけれども、
これをMIPSのアセンブリコードを吐かせるようにするには
どうすればいいのですか?
0140デフォルトの名無しさん
NGNGmips-elf-gcc とか。
0141デフォルトの名無しさん
NGNGgccのソースもってきて
対象CPUに./configure
アセンブラを実行可能形式にしたいなら
binutil/glib
も./configure
0142デフォルトの名無しさん
NGNGgcc-2.95.3をコンパイルしようとすると、
#./configureのオプションは--enable-language=C++のみ
make bootstrapの途中で
xgcc.exe: installation problem, cannot exec `as': No such file or directory
というアセンブラが見つからないというメッセージが出て失敗します。
as.exeやar.exeはPATHの通っている場所にあり原因は不明です。
ググってみたところ同じ問題で悩んでいる人もいるようですが、
結局原因と解決方法はよくわかりませんでした。
どなたか詳しい人いませんか?
0143デフォルトの名無しさん
NGNG> #./configureのオプションは--enable-language=C++のみ
Cは指定しなくても入るんだっけ?
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNGgcc/config/i386/i386.{c,h,md}
を修正。
0148デフォルトの名無しさん
NGNGclass B;
class A{
B b;
};
class B{
A a;
};
VCではコンパイルできるのですが、Cygwin gcc-3.2 でエラーになります。
何か書き方があるのでしょうか。
0149148
NGNGごめんなさい。鬱
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG他のヘッダーファイル同様、ソースに#include <stdlib.h>と書けば使える。
インクルードディレクトリがきちんと設定されていなかったら、-I<DIR>
0153デフォルトの名無しさん
NGNGレスありがとうございます。
うーんちゃんと#include <stdlib.h>ってかいてあるんですけど
どうも使えないのです、、、
学校で使っているLINUXなのですが、僕にはそのLINUXがさっぱり判らなくて、、、
math.hも-lmってオプションつけないとエラーが出るんです。
でもおっしゃるようにインクルードディレクトリの問題かもしれないので
-Iを試してみます。
0154152
NGNG-lm(というか-l<lib>)はリンクオプションだよ。
もしかしてstdlib.hで宣言されている関数を使おうとしたけど、「undefined reference to 〜」とかエラーがでたの?
なんという関数を使おうとしたの?
0155デフォルトの名無しさん
NGNGミラーにも来てるな。
取ってこよう。
0156デフォルトの名無しさん
NGNGはい、そうなんです。使いたい関数はitoaとsprintfなんですが、、、
しかしリンクオプションと言うのですか、不勉強で判りにくいこと言って申し訳ないです。
0157デフォルトの名無しさん
NGNGitoaなんかないと思うぞ。sprintfはstdio.h
sprintfならlibc.aに含まれているはずだから、特に指定しなくてもリンクされると思うけどなぁ。
綴り間違いはない?
0158デフォルトの名無しさん
NGNGsprintfはitoaが使えないので学校ですこし試しただけなので、つづりや
書式が間違ってたのかもしれません、次に確認してみます。
0159デフォルトの名無しさん
NGNGそりゃあ、VC++にはitoaがあるからな。
itoaはCの標準関数じゃないからあると期待してはいけない。
0160デフォルトの名無しさん
NGNG0161155
NGNG3.2と共存させようと思ったのに。
共存させる場合は、今使ってるコンパイラドライバを
どこかにコピーしておくと幸せになれます。
0162slipknot
NGNG0163デフォルトの名無しさん
NGNGんですが、保存しなければならないレジスタってどれでしょうか?
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNGinfo gcc
むしろ、インラインアセンブラにした方が楽と思われ。
0166デフォルトの名無しさん
NGNG書式が意味不明だっつーの
0167デフォルトの名無しさん
NGNGもういっぺん、マニュアルを読んでみよう。
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG"call %1;addl %2,%%esp;movl %%eax,%0;"
:"=r" (tmp)
:"r" (tmp), "r" (count), "r" (tmp)
: "%eax", "%esp"
);
例えばこれの説明おねがいします
0170デフォルトの名無しさん
NGNGAssembler Instructions with C Expression Operands
読んでないから説明はできないけど多分infoのここを読めば分かるのでは
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGマジレスしたやつには「釣れた(藁」を送ります。
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG知らないからといって質問を妨害する行為はどうかと。
俺も知らんけどさ。
0175デフォルトの名無しさん
NGNG関数コールしてスタックを戻したあと、返値を変数にストアしてるだけ。
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGま、169が書き間違ったんだろうが。。
0178デフォルトの名無しさん
NGNGこんな感じかな?
レジスタの割り当ては適当。
movl tmp,%%ebx
movl count,%%ecx
#APP
call %%ebx
addl %%ecx,%%esp
movl %%eax,%%ebx
#NO_APP
movl %%ebx,tmp
0179デフォルトの名無しさん
NGNGそのAPPやらNO_APPってなんですの?
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG-I(インクルードのオプションね)を使うと
/usr/include/g++-3/cmath: In function `float abs (float)':
/usr/include/g++-3/cmath:40: `fabs' undeclared (first use this
function)
/usr/include/g++-3/cmath:40: (Each undeclared identifier is reported
only once for each function it appears in.)
ってエラーが出るんですけど、何が原因なんでしょうかね?
このオプションを使わないと何もエラー出ないんですけど。
0184bloom
NGNG0185デフォルトの名無しさん
NGNGどう使ったの?
0186183
NGNGとか
g++ -I.. -ansi -pedantic -Wall -Wno-long-long -D___MAC___ -g -D_DEBUG -c -o debug/xxxx.o xxxx.cpp
とか。
これで #include <iostream> とか
#include <fstream> とかすると、>>183 みたいなエラーが出ました。
0188183
NGNGこっちでも適当なテストプログラム作ってみたら
エラー出ませんでした。
でも、やっぱり問題のプログラムではエラーが出ます。
ということは、もしかしたら何かファイル名がコンフリクトしてるのかもしれません。
ちょっとチェックしてみようと思います。
0189デフォルトの名無しさん
NGNGそういやこんなの作ってました。
どうもお騒がせしました。
0190183=189
NGNG冗長に #include<xxxx/xxxx.h> とインクルードするようにしたら
解決しました。
ホンマ、ボケボケでした。
よくライブラリがこうするようになってるのは
そういう理由だったのね...。
ひとつ勉強になりました。
0191デフォルトの名無しさん
NGNGあと、それのmingwバイナリを落とせる場所教えて欲しいのですが・・
0192デフォルトの名無しさん
NGNG> 現在のGCCの最新verはいくつですか?
http://www.google.co.jp/search?q=GCC&ie=Shift_JIS&hl=ja&lr=
> あと、それのmingwバイナリを落とせる場所教えて欲しいのですが・・
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=MinGW&lr=
0193デフォルトの名無しさん
NGNGエラーにならないんじゃなくて、エラー内容が出ないんです。
別マシンの別環境なら大丈夫なんですが。
どなたか、同じようなことになって直した方がいらっしゃったら教えてください。
makeのバージョンは3.79.1です…これか?
0194デフォルトの名無しさん
NGNG環境書けや。
0195デフォルトの名無しさん
NGNGmakeじゃない時のエラーを書けば?
0196193
NGNGlinuxは素人同然なのでアレなのですが…
コマンドライン(?)でコンパイルした場合、ワーニングやらエラーがあればそれが出ますよね。
makeでやるとそれらがまったく出ずに
make: *** [xxxx.o] Error 1
だけしか表示されないんです。
知りたいのは、そうなる(する)には要因というか原因というか…
・makeにオプションがある
・makefileの書き方に問題がある
・コンパイラにオプションがある
・コンパイラをビルドし直す
自分ではそれ位しか思いつきませんでした。
直し方というか、逆にこうすればmakeでメッセージを表示しなく出来るよ的な事を知りたいと思いました。
とりあえず現状ではエラーが出た時にそれだけコマンドラインでコンパイルしてメッセージを表示させています。
非常に非効率的であります(自爆
微妙に板違いな感がありますが…
0197デフォルトの名無しさん
NGNGcygwinの問題だと思う。
cygwin1.dllのバージョンとか、どうやって動かしてるか(コマンドプロンプト
からかtelnetかそれ以外か)とか分からんと何ともいいようがないが。
おそらくUNIX板のcygwinスレの方が適切と思われ。
0199山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG-nオプションつけて何が実行されるか見てみれば?
-npでルールを見るのもいいかも試練
0202193
NGNG調べてみたらクロスコンパイラのディレクトリに古いcygwin1.dllがありました。
それをなくしたらちゃんと表示されるようになりました。
自分でビルドしたものではなかったのでうかつでした。
0203デフォルトの名無しさん
NGNGライブラリ作成に挑戦しているのですが、
ライブラリの作り方が間違ってるのかどうか分かりませんが、
場合によってシンボルが未定義と言われるか
言われないかが変わってしまって困っています。
先ず、ディレクトリ構造はこんな感じです。
lib
libxxxa.a
libxxxa
libxxxa.a
test
a
libxxxb
libxxxb.a
test
a
libxxxa/libxxxa.a は
libxxxa.a: ${OBJS}
ar -rcv $@ $? ; \
ranlib $@
のように作っています(一部マクロを展開しています)。
lib/libxxxa.a はそれをコピーしたものです。
libxxxb/libxxxb.a も同様に作成しました。
libxxxb は libxxxa で作ったヘッダファイルをインクルードしてますが、
ライブラリ libxxxb/libxxxb.a には lib/libxxxa.a の内容を追加していません
(というか、方法が分かりません)。
0204203
NGNGa: ${OBJS}
g++ -L../../lib -o a ${OBJS} -lxxxa
のようにして lib/libxxxa.a をリンクし、
これは問題なくリンクできました。
問題なのは libxxxb/test/a で、
a: ${OBJS}
g++ -L.. -L../../lib -o a ${OBJS} -lxxxa -lxxxb
のようにリンクすると、libxxxa.a で定義されているはずのものが
未定義だという文句が返ってくるのです。
このオブジェクトは両方の test/a 内で使われているにも関わらずです。
なぜこのような違いが出てくるのでしょうか?
何か心当たりがあればご教授お願いします。
0205デフォルトの名無しさん
NGNGできる場合も gcc でコンパイルしたことを明記しないとだめとかありますか?
0206デフォルトの名無しさん
NGNG(゚∀゚)もんだいないよ
0207デフォルトの名無しさん
NGNGg++ -L.. -L../../lib -o a ${OBJS} -lxxxa -lxxxb -lxxxa
にしてみたらどうなる?
0208203
NGNGその未定義シンボル(と言われたもの)は
libxxxb で使われたシンボルのようです。
このあたりが悪さをしているようです。
で、libxxxb.a に libxxxa.a を追加する事で解決しました。
で、-lxxxb とリンクすれば、問題なくリンクできました。
ar に ../../lib/libxxxa.a を追加しただけなのですが...
本当にこれでいいんでしょうか?
0211デフォルトの名無しさん
NGNG本来ならranlibすれば後方参照もしてくれる気がするんだけど、
うまくいかない場合は -lxxx の位置を前後させたり
再度指定してやると吉。おまじない程度に覚えておきましょう。
0212デフォルトの名無しさん
NGNGgcc自体は大方問題ないことになったはずだけど、
むしろリンクするライブラリについて注意を払ったほうがいい
0214デフォルトの名無しさん
NGNGxxxb, xxxa内のシンボルの参照関係はどうなってるの?
g++ -L.. -L../../lib -o a ${OBJS} -lxxxb -lxxxa
だとどうよ?
0215203
NGNG今はそういう風にやってます。
ライブラリが多くなってくると指定が長くなって、
いざ使おうとすると面倒になってしまうのですが
(まぁ、最初に Makefile を作る時の一度だけですが)、
複数のライブラリを合成する方法ってありますか?
0216デフォルトの名無しさん
NGNG> 複数のライブラリを合成する方法ってありますか?
オブジェクトを展開してar。
0217デフォルトの名無しさん
NGNGそれで済んでいるのなら、
・xxxbでxxxaのシンボルを使っているが、
・xxxaではxxxbのシンボルを使っていない
ただ、これだけのことでしょう? >>207である必要はない。
参照される方を後ろに書く仕様なんだよ。
それを知らなかったから悩んだだけの話で、その失敗を、
> いざ使おうとすると面倒になってしまうのですが
> (まぁ、最初に Makefile を作る時の一度だけですが)、
> 複数のライブラリを合成する方法ってありますか?
としようとするのは短絡としいか言い様がない。なにをしようと起きた失敗はなくせない。
gcc特有じゃないから、続きはくだ質スレで。
0218デフォルトの名無しさん
NGNG○ld
0219203
NGNG参照される方を後ろに書く、というのはもう既に分かってます。
だからこそ >>207 ではなく >>214 にしてるわけで。
こういうライブラリ拡張を何段階もやってると、
最終的なライブラリを使おうとすると、
その度に -lxxxe -lxxxd -lxxxc -lxxxb -lxxxa とか書かないといけないのが
面倒だという話です。
いちいち順番を気にしないといけませんし。
libxxxa.a を libxxxb.a にコピーしてオブジェクトファイルを追加、
という方法でならできますが、
libxxxa.a を更新したら libxxxb.a を全更新しないといけないのが
エレガントじゃないなぁ、とも思います。
かといって、libxxxb から libxxxa のオブジェクトファイルも
アーカイブしようとすると、
Makefile を作るのが面倒になってしまいます。
できるなら既に作られているライブラリ同士をくっつけることができると嬉しいです。
UNIX プログラミング質問すれに移行しようかと思いましたが、
スレ移行時期のようなのでここで続けようと思います。
0220デフォルトの名無しさん
NGNG上げちょってください。
0221デフォルトの名無しさん
NGNG-Wl --start-group --end-group
0222203
NGNGうちの ld には --start-group と --end-group フラグがないようです。
検索しても何をするものか書いてるページは見つかりませんでしたが、
多分、この中では前方参照後方参照どちらでもできるというもの、だと推測します。
まぁ、使えなければ何をするものか分かっても
どうしようもないんですけどね...。
情報ありがとうございました。
0223デフォルトの名無しさん
NGNG何見てそう判断したんだ?
0225203
NGNG0226デフォルトの名無しさん
NGNGほとんどの GCC では、>>206 の言うように問題ないと思うけど、
中には cygwin のやつみたいに、ライセンスの制限がかかったりするのもあるんで、
一回はちゃんとドキュメントを読んだほうがいいよ。
ありえないとは思うけど、>>205 の使ってる GCC がすんごい変なやつの場合は、
できたバイナリを商用にするのを禁止してる可能性があるかも。
# cygwin は普通にビルドすると、そのバイナリは GPL で配らないとダメ。
# 別に、GPL でも商用にできるけどね。
0227デフォルトの名無しさん
NGNGinfo ld
Mac OS XってGNU ldじゃないのか?
0228デフォルトの名無しさん
NGNG> # cygwin は普通にビルドすると、そのバイナリは GPL で配らないとダメ。
どこに書いてあった?
0229デフォルトの名無しさん
NGNG0230>>217
NGNG> Mac OS XってGNU ldじゃないのか?
基本的にMac OS Xのcc環境はgccなんですが、
NEXTSTEP由来のldを使ってます。dynamic link関係も全然違う機構です。
それからcppもgccのと違って独自のものに入れ替えてますね。asは、
$ as -v
Apple Computer, Inc. version cctools-435.obj~4, GNU assembler version 1.38
ですね。ELFじゃなくて、Mach-Oだから改造してるんでしょうね。
http://www.opendarwin.org/cgi-bin/cvsweb.cgi/src/cctools/
と公開してますが、gas側はこんなの(not ELF)はmergeしてくれないかも。
ELFにすればよかったのにね。
0231デフォルトの名無しさん
NGNG独自路線が好きだからな。
MPWはとんでもなかった。
今でもディレクトリ構成とか強烈らしいが。
0232>>217
NGNGApple cpp-precomp 6.14 (devkit-213/devkit_tools-214)
こんなheader pre-compilation付きcpp使ってるですよ。
後、cppの文法も緩くなっているみたいですね。(過去資産問題)
面白いのは、dynamic linkにもprebindingの機構があることですね。
ライブラリを入れ替えると、関連実行ファイルをredo_prebinding(1)する。
パッケージのインストーラが「最適化中…」というのはこれ。
MIPSのa.outにも同じような機構があった。
0233デフォルトの名無しさん
NGNGlibbfdを作れればマージしてもらえそうな気もしますが。
powerpc-pc-macos-machoとか。
0234デフォルトの名無しさん
NGNG載ってる本かHPってありますか?(日本語で)
使ってるのはgcc3.2です。
0235デフォルトの名無しさん
NGNGageちゃってゴメンです。
0236デフォルトの名無しさん
NGNG安心して24時間お買い物ができる!
セルビデオ店が近くにないお客様も気軽にお買い物を楽しめます。
http://www.net-de-dvd.com/
安心確実
お支払は安心の代金引換です
振り込んだのに商品が届かない等
の心配は無用!
http://www.net-de-dvd.com/
0237デフォルトの名無しさん
NGNG↓これで探せ。
ttp://www.google.co.jp/search?q=%E8%8B%B1%E5%92%8C%E8%BE%9E%E5%85%B8&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0238234
NGNGハァ?!
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGinfoにもなかったような気がするが。
0241ヽ(´ー`)ノ
NGNG// かなり怪しい日本語だけど(ワラ
0242デフォルトの名無しさん
NGNG3.1からそうなってるけど、却ってわかりにくくってねえ。
自分で入れる時は--disable-nls必須
0243名無しさん@Emacs
NGNGLANG=C gcc ........
ってやるようにしてるなぁ。そっちの方が良くね?
まぁ人それぞれと言われりゃそれまでだが。
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG俺もそれやってるよ。
0247デフォルトの名無しさん
NGNG出ますディレクトリ
0248デフォルトの名無しさん
NGNG誰かもっとマシな翻訳作ってないのかよ。フリーソフトなんだからよ。
0249デフォルトの名無しさん
NGNGけなくて、そうすると全言語分影響されちゃうんだよ。
0250デフォルトの名無しさん
NGNG元のメッセージもいけてないってこと?
0251デフォルトの名無しさん
NGNG3.79.1では、英語の語順に依存して組み立てるコードになってる。簡単に言うと、
printf("%s directory `%s'", "Entering", dir)
みたいな感じ。こういうのはメッセージの翻訳を考えるとよくないとされてる。
3.80では(多分翻訳者から文句を受けて)これが"Entering directory `%s'"みた
いに改善されたんだけど、日本語の翻訳者はヴァカなので、Entering directoryも
Leaving directoryも両方単に「ディレクトリ %s」になってる。
とにかく「出ます」「入ります」を外せば批判はかわせるとでも思ったんだろうな。
もうね、(略
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG0256ディフォルトの直訳さん
NGNG3.80だったら、どう考えても、
「ディレクトリ'%s'に入ります。」
「ディレクトリ'%s'から出ます。」
だよな〜。
main.cより
char *msg = entering ? "Entering" : "Leaving";
0257デフォルトの名無しさん
NGNG3.79.1だとそもそもこうなってて、語順を変えることもできない。
msgid "Entering"
msgstr "入ります"
msgid "Leaving"
msgstr "出ます"
msgid "directory `%s'\n"
msgstr "ディレクトリ `%s'\n"
0258デフォルトの名無しさん
NGNGmsgid "Entering"
msgstr "入りますディレクトリ"
msgid "Leaving"
msgstr "出ますディレクトリ"
msgid "directory `%s'\n"
msgstr " `%s'\n"
ってやればいいんじゃない?
0259デフォルトの名無しさん
NGNGそれでキミは何がしたいのかね?
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG遭遇・退去にしてみてはどうか。
ディレクトリ%sに遭遇
ディレクトリ%sから退去
0262デフォルトの名無しさん
NGNG0263ディフォルトの名無しさん
NGNGディレクトリ'%s'から転進
0264デフォルトの名無しさん
NGNGディレクトリ'%s'から撤退
0265デフォルトの名無しさん
NGNG退却
0266デフォルトの名無しさん
NGNGディレクトリ%sからガッ
0267デフォルトの名無しさん
NGNGきたの%sから
0268デフォルトの名無しさん
NGNG出ます:ディレクトリ%s
と、コロンを入れるだけで読めるようになるんだが。
0269デフォルトの名無しさん
NGNG排出
0270デフォルトの名無しさん
NGNGそろそろ、gccネタ(>>244)でよろ。
0271デフォルトの名無しさん
NGNGろ、というこっちゃ。
0272デフォルトの名無しさん
NGNG作るにはどーしたらいいの?
0273デフォルトの名無しさん
NGNG初めて知った。
0274234
NGNG構文ミスかリンク不能くらいかも知れないけど、一覧が欲しいんです。
お前等、早く教えてください。
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNGコマンドを実行するとき、stdlibのsystem()を使う以外に
gccのおすすめがあるんでしょうか?
0279デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNGグーグルね、一応。
0283デフォルトの名無しさん
NGNGこれ>>278なんじゃないかと思ったり思わなかったり
0284デフォルトの名無しさん
NGNGgccでビルドする場合、大抵はglibcを使うことになると思うが、
glibcは将来的にGPL(現在はLGPL)化されるよう(http://linux.nikkeibp.co.jp/faq/200107-3.org.html参照)なので
その際はglibcを使った全てのソフトウェア(性質上、staticリンクしているものもdynamicリンクも)は
GPL下で頒布することが義務付けられるわけかな?
OSの基本機能がGPL下にある場合は適用外と解釈されているようだが、Windows上でgcc+glibcを使ってプログラムを組む場合、
glibcはOSの基本機能ではないのでこの場合全てGPLにしろとなるのか…
もしそうなると、フラウンホーファのMP3関連特許料請求やらUNISYSのLZW関連特許料請求よりもタチの悪いことになるわけだが…
そもそも、GPLは将来新バージョン(GPL3とか)が出た場合に、プログラム作成者側で
GPL3ではなくGPL2で頒布するというような選択を出来ない(らしい;http://motoyuki.bsdclub.org/d/d200103a.html参照)わけで
GPLがFSFに都合よく改変されても文句言えない、と。
個人的にはあまり好きじゃない。
GPL議論は他所でやれって言われそうだがなぁ・・・
0285デフォルトの名無しさん
NGNGへ?
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGlinux標準はglibcで、Cygwinにくっついてくるのもglibcだと思ってたんだけど
0288デフォルトの名無しさん
NGNGでもBSD UNIXやMacOSXはgcc使ってるけどGPLじゃない。glibc使ってないから。
何の問題が…?
0289デフォルトの名無しさん
NGNGまず、glibcはLGPLだと思うけど
> だからlinuxはGPLだしcygwinもGPLだろ
ちょっとかみ合ってない気がするが Linux上でglibcを使う全てのソフトウェアはGPLかというと、そうじゃないでしょ
それはglibcが現状ではLGPLだからであって、将来的にGPL化するとglibcを使う全ソフトのGPL化が強制されるのか?と
そこを言いたいんだけど
0290デフォルトの名無しさん
NGNGNetBSDのlibcから作ったって聞いたような
0291デフォルトの名無しさん
NGNGつまり、Cygwinはglibcじゃないのかね これだけで決めるのは早計か
0292デフォルトの名無しさん
NGNG> 4.4.4 glibc はどこにあるのですか?
> Cygwin は glibc を提供しません。代わりに、同じ機能の大部分(全てではありません)
> を提供する newlib を使用します。 glibc を Cygwin へ移植するのは難しいでしょう。
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGようするに…
LGPLで提供されていた、とあるライブラリ(Aとする)があって、
それがnew versionになるとともにLGPLからGPLになってしまった。
あるプログラムBはラ、イブラリAを使っている。BはそれまではGPLでは
なかったのだが、これを機にGPLにしなければならないのか?
という質問だよなぁ?
単にLGPLだった時のversionのライブラリAを使いつづければいいだけじゃ?
#gccと関係ねーなぁ
0295デフォルトの名無しさん
NGNG【GPL】ライセンス問題すれ【BSD】
http://pc.2ch.net/test/read.cgi/linux/1037015552/
0296デフォルトの名無しさん
NGNGライブラリのバージョンアップではなく、ライセンスのバージョンアップ
GPLのバージョンアップにより、GPLなライブラリは新GPLで解釈されることになり、
新バージョンのGPLが現在のLGPLの内容とconflictするものであれば
新GPLが優先され、結果として現バージョンのライブラリでも将来的に勝手にGPLになり得る って話
gccつーかglibc話なんだけどね
0297デフォルトの名無しさん
NGNG>>295
0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNGどうもです。Lオプションでディレクトリを指定すればいいんですね。
gcc -o hello.out -L /hoge hello.c
で、/hogeにライブラリを置いておけばいいということですね。
毎回、指定するのではなく、デフォルトの検索パスに含めることはできないのでしょうか?
0301info gcc
NGNGEnvironment Variables Affecting GCC
===================================
`LIBRARY_PATH'
The value of `LIBRARY_PATH' is a colon-separated list of
directories, much like `PATH'. When configured as a native
compiler, GCC tries the directories thus specified when searching
for special linker files, if it can't find them using
`GCC_EXEC_PREFIX'. Linking using GCC also uses these directories
when searching for ordinary libraries for the `-l' option (but
directories specified with `-L' come first).
環境変数の指定もイヤなら、specファイルを書き換えろ。
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNG>デフォルトの検索パスに含めることはできないのでしょうか
0308デフォルトの名無しさん
NGNGを使っているのだけど、最適化オプション(-O以上全部)
をつけてコンパイルすると勝手に-ffast-mathが指定され
てしまう模様。-fno-fast-mathも意味なし。
infoにも
「-ffast-mathはIEEE/ISO規格に違反することになる
から、どんな-Oをつけても勝手に有効にならない」
って書いてあるから明らかにバグだと思うのだけど、
他バージョンをbuildできるリソースが足りないので
自分で確認できないのです。
このバグが確認できる・確認できないバージョンを
教えてもらえませんか?
0309デフォルトの名無しさん
NGNG0310308
NGNGsqrt(-1)というような、errnoがEDOMになるべき
数学関数呼び出し(manに書いてある仕様より)の後
でも、-Oをつけると常にerrnoが0になることからです。
これは、-ffast-mathの挙動と同じはずです。
一方、オプションをつけずにコンパイルすると
仕様通りのerrnoになります。
また-ffast-mathのみを指定した場合と、-Oだけ指定
した場合共に、プリプロセスの段階で数学関数が
インラインで定義されていることを、-Eオプションで
確認しました。
オプションなしのコンパイルでは、こうはなりません。
0311デフォルトの名無しさん
NGNG0312311
NGNG0313デフォルトの名無しさん
NGNG3.2.2でも一緒。つーか-Oを付けると-lmも不要になるな。
$ LANG=C gcc -v | tail -1
gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
$ echo 'int main(){printf("%d,%f\n", errno, sqrt(-1));}' |
>> LANG=C gcc -O -include errno.h -include stdio.h -include math.h -xc - &&
>> ./a.out
0,nan
$ echo 'int main(){printf("%d,%f\n", errno, sqrt(-1));}' |
>> LANG=C gcc -include errno.h -include stdio.h -include math.h -xc - &&
>> ./a.out
/tmp/ccIKCX5e.o(.text+0x1b): In function `main':
: undefined reference to `sqrt'
collect2: ld returned 1 exit status
$ echo 'int main(){printf("%d,%f\n", errno, sqrt(-1));}' |
>> LANG=C gcc -include errno.h -include stdio.h -include math.h -xc - -lm &&
>> ./a.out
33,nan
0314308
NGNG-Sのこと? 試してみます。
>>313
おお、どうも…と言いたい所だけどツッコミ所
満載のご様子。
-lmが不要になるのは、自分が書いたとおり
プリプロセス段階で直に定義されたからでしょう。
このコードがerrnoをセットしないと思われれ。
errnoは0で初期化しないとなんとも…。
さらには、関数の引数の評価順序も未定義ですので。
できれば上の二点を改良した上で、確認して
もらえますでしょうか?
けど仮に3.3でも直ってないことが確認できれば、
上流に報告しなくちゃだなぁ。
0315デフォルトの名無しさん
NGNGワラタ
0316308
NGNGまず
>>310
には誤りがありました。
-ffast-mathのみでは、プリプロセスの段階で数学関数は定義されませんでした。
焦っててすんません。
それでinfoを見直したら、errnoをセットしない直接の原因は-ffast-mathでなく、それと連動して定義される-fno-math-errnoの方らしいので、以下-ffast-mathは忘れて下さい。
ということで-Sも動員して、-Oと-f{no-,}math-errnoを組み合わせてできる一通りを比較した結果。
・オプションなし、-fmath-errnoのみ、-fno-math-errno
の三つとも同じもので、errnoをセット
・-Oのみ、-O -fmath-errno、-O -fno-math-errno
の三つとも同じもので、errnoをセットしない
つまりは
『-f{no-,}math-errnoの指定は無視され、-Oで無条件に-fno-math-errno』
ということ、らしいです。
他にも同様のバージョンありますか?ちなみに使ったソースは以下です。
#include <errno.h>
#include <math.h>
#include <stdio.h>
int main(void){ errno=0; sqrt(-1.0);
printf("%d\n", errno); return 0;}
0317デフォルトの名無しさん
NGNGsource見て確認するのが一番です。
0318デフォルトの名無しさん
NGNG3.2.2も同じだった。
3.3はまだインストールしてない。コンパイル時間かかるし。
0319デフォルトの名無しさん
NGNGLinux 以外ではそうならないので、glibc or glibc+gcc が悪いのでは?
0320308
NGNGそれはそうでしょう。特にmanは。
ただ今回のは、文章側が正しくて実装にバグがあると判断しました。
info文中のニュアンスの強さと、最適化オプションつけるだけで
C89にまで非準拠になってしまっては誰もうれしくないだろう、という点で。
ただ、source見るのが一番というのにはもちろん同意。
自分に能力があるのか…は別にしても、ドキュメントに不信感を持ったら
最初からそうしたと思います。今回はバグであるという仮定をして、
その波及範囲が知りたいということです。
0321308
NGNGどうもっす。実際に困っていて、コンパイルできるディスクなどの
余裕がないのは間借りして使ってるLinuxの方ですが、
もし単なるオプションさばき周りのバグなら、他の環境でも
再現性ありそうですよね。
手元のCygwinでも3.3入れたりして、色々試そうと思います。
と書いてたら、
>>319
やはり。そちらの環境は?
0322デフォルトの名無しさん
NGNGFreeBSD
Solaris
Cygwin
0323308
NGNG手元のCygwin最新(1.3.22、gcc 3.2 20020927 prerelease)だと確かに、
318氏とは違うことになります。
-Oと-fno-math-errnoを「同時に」指定したときのみ、errnoセットを
しないオブジェクトを吐きます。
どうもGCCとGlibcの連携の問題のようですね。
残りはまた後で追求します。
ありがとうございました。
0324デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG-mno-cygwinでコンパイルすれば大丈夫。
0327278
NGNGcygwinのgcc3.2でsystem()が使えないんです・・・
#include <cstdlib>
int main(){system(NULL);}
で-1が帰ってきます。(manによるとエラーは0らしいですが-1は正常?)
system("ls"); は127が戻ります
system("command.com /c dir"); も127が戻ります
なぜでしょう・・・
P.S execも返ってきます
0328デフォルトの名無しさん
NGNG> で-1が帰ってきます。(manによるとエラーは0らしいですが-1は正常?)
-1はエラー。実行できなかった場合。
$SHELLはちゃんと設定されてる?
0329308
NGNG結論から言うと、GCCとの連携ミスによるGlibcのバグでした。CVS HEADでは治ってます。
具体的には、i386固有のバグ。sysdepsなmathinline.h中のsqrtの部分で、-ffast-mathの有無に関わらず、常にerrnoをセットしないコードが有効になっていた模様。
最初に3年前、複数の数学関数についての同様の問題が
ttp://sources.redhat.com/ml/libc-hacker/2000-04/msg00056.html
で指摘され、その10日後に再提出されたパッチ
ttp://sources.redhat.com/ml/libc-hacker/2000-05/msg00142.html
にUlrichがOKを出した…はずなのに「Slightly modified」でミス?
とにかく、今年6/2付けで再び彼の手によって修正。2.3.3でfixって事で。
詳しくは
ttp://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/sysdeps/i386/fpu/bits/mathinline.h?cvsroot=glibc
とりあえずRedhat7.1上では、-O使わないことでしのぐっす。お世話になりました。
0330デフォルトの名無しさん
NGNG参考になった。
0332278
NGNG.bashrcで
export SHELL=/bin/bash
としてあったと思います。cygwinインストールのデフォルトです。(ウロオボエ)
取り合えず会社行ってその辺の設定を見てみます。
#天気いいのに休出か・・・
0334デフォルトの名無しさん
NGNG0335278
NGNGecho $SHELL で、
/bin/bash
とでます。
今、家のPCにもCYGWINいれて試しましたがやっぱりだめです。
関係ないけど、ためしのプログラムをtest.exeで作成して動かなくて
1時間無駄にしました。
UNIX初めたばかりですがもうくじけそうです。シクシク
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNGま、素人は ftp://ring.gr.jp/GNU/gcc/ から落としときなさいってこった。
0340デフォルトの名無しさん
NGNG-mtrd (可変以外の全関数をstdcallへ)をつけてコンパイルし、
プログラムを実行すると、「セグメンテーション違反です」と言われます。
付けない場合はうまくいきます。
gdbで色々調べた結果、エラー個所はライブラリ関数の様です。
/usr/include/のライブラリのヘッダファイルを見ると、
cdeclとかの記述が無く、呼び出し形式がまったく考えられてなさそうです。
ちなみにmingwのgccでは正常でした。
特定の自作関数でstdcallを使ってる個所があり、
またstdcallの方が小さくなります。
結構たくさんあるので、__attribute__ ((stdcall))をいちいち関数毎に
付けていくのはしんどいです。
以上の理由でどうしても-mrtdオプションを使いたいんですが、
どうすればよいでしょうか。
0341デフォルトの名無しさん
NGNG/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/specs から spec を読み込み中
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infod
ir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --w
ith-system-zlib --enable-__cxa_atexit --host=i386-redhat-linux
スレッドモデル: posix
gcc バージョン 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
mingw側のgccのバージョンは、
Reading specs from C:/MINGW/BIN/../lib/gcc-lib/mingw32/3.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=f77,c++,objc,ada --disable-win32-registry --disable-shared
Thread model: win32
gcc version 3.2 (mingw special 20020817-1)
0342デフォルトの名無しさん
NGNGで、info読んだの?
*Warning:* this calling convention is incompatible with the one
normally used on Unix, so you cannot use it if you need to call
libraries compiled with the Unix compiler.
それに、「小さくなります」だけの理由でなぜに「どうしても使いたい」と
なるわけ? 先に根本的な理由を示そうよ。方法を決め付ける前に。
0343デフォルトの名無しさん
NGNG既存のアセンブラルーチンが全部stdcall呼び出し前提なので・・
0344デフォルトの名無しさん
NGNGちなみに、infoは間違いだらけだと聞いたので読んでません
0345デフォルトの名無しさん
NGNG「間違いだらけだからinfoもmanも読まねー」と言っていいのは
sourceを読んで動作が理解できる奴だけだヴァカ
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG0348デフォルトの名無しさん
NGNG>>342
「どうしても使いたい」という理由じゃ駄目なんですか?
実際つけると効果があるわけだし。
0349デフォルトの名無しさん
NGNG結論から言うと、ライブラリインクルードした場合は使えない。
gcc側で警告でも出せばいいとは思うけどな。
これはライブラリの問題。
うちの会社だと重障害扱い。
0350デフォルトの名無しさん
NGNG呼び出し既約に左右されるような関数で
実際の関数とプロトタイプを作る時に
何の工夫もしなかった、あんたが悪い
0351デフォルトの名無しさん
NGNGライブラリも-mrtd付きで作りなおす。
>>349
標準じゃないABI使うんだから、一概にライブラリの問題とも言えないだろう。
0352デフォルトの名無しさん
NGNGこれからプロトタイプ書き並べる事にします。
0353デフォルトの名無しさん
NGNG「Unixでコンパイルされたライブラリを呼び出す必要があるなら、このオプションは使えない」のでしょ? 当然libcも含めて。
0354デフォルトの名無しさん
NGNGありがとうございました。
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG同意。どのみち、GNUで一番メンテされるドキュメントはinfoだろうし。
ちなみにGCCのinfoは最近、結構大きな改定があったのでは。
0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNG> これはライブラリの問題。
なんだよ、コンパイラの全ての動作に対応しないと(ry
ライブラリの中の人も大変だな。
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGライブラリをインクルードする世界では、
そういう苦労もありなんでしょう。
0361デフォルトの名無しさん
NGNG変数を宣言した時に、勝手に0で初期化されてるのって俺だけの環境ですか?
他にも、
int m;
printf("m = ");
scanf("%d", &m);
int a[m];
a[0] = 0; .......
こんなのがエラーにならなくなった。
これっておかしいんじゃないですかねぇ。
環境はcygwin + gccでつ。
0362デフォルトの名無しさん
NGNGアレはどうかと思う。
0363デフォルトの名無しさん
NGNG0xAA → 0b11001100
これに違和感ある人います?
0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNG0366363
NGNGはい。そのとおりです。
で、訂正
0xA = 10 = 0b1010
に違和感ある人います?
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNGCの文法から激しく外れるなぁ。
最後まで見ないと基数わかんないし。
で、それがなにか?
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNGその頃はモニターが10進数→バイナリ変換するのも大変だったわけだが、
の名残り。アメリカ人は結構8進数好きあるね。
0372デフォルトの名無しさん
NGNGでも2進数の表記が無かった理由としては弱いなぁ。
0373デフォルトの名無しさん
NGNG変換する関数はあったけど2進数は無かったな。
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNGまともな使い方知ってる香具師も少ないし。
0376デフォルトの名無しさん
NGNGビットフィールドは、エンディアンによってのふるまいが
定義されていなかったからね。最初は。
0377デフォルトの名無しさん
NGNG今は定義されてるのでしょうか?
最近あるコンパイラでビットフィールドではまってたんで、
きになってます。
0379デフォルトの名無しさん
NGNGほしい人・・・いませんよね
すみません。ごめんなさい
0380デフォルトの名無しさん
NGNGgccをmakeして使う人がどれぐらい居るかだな・・。
0381デフォルトの名無しさん
NGNG「ちゃんと」ってどういう風に?
0382デフォルトの名無しさん
NGNGというか、「ちゃんと」してるなら、本家にマージせよ。
二進数パーズもコマンドオプションでオフに出来ないとマージして貰えないと思う。
0383山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0384デフォルトの名無しさん
NGNGスタートアップルーチン中の2度目の malloc 呼び出しで SIGSEGV してしまいます。
何故でしょう?
ちなみに独自の実装と言っても、malloc 置き換えテスト用の
static unsigned char buffer[1024 * 1024 * 1];
static int index = 0;
void* result = buffer[index];
index += size;
return result;
みたいなやつで、実用には耐えませんが間違いは起こらないはずの物で
一度目の要求が 16 バイト、その次の(返した後に SIGSEGV喰らう)要求が 132 バイトなので
一見問題なさそうです。ちなみに下記はその時のスタックトレースです。
#0 0x6108be79 in cygwin1!cfsetispeed () from /usr/bin/cygwin1.dll
#1 0x610893fc in cygwin1!cfsetispeed () from /usr/bin/cygwin1.dll
#2 0x610892d3 in cygwin1!cfsetispeed () from /usr/bin/cygwin1.dll
#3 0x61006d9f in cygwin1!__assert () from /usr/bin/cygwin1.dll
#4 0x610076ed in dll_crt0@0 () from /usr/bin/cygwin1.dll
#5 0x004026f2 in cygwin_crt0 ()
#6 0x0040103c in mainCRTStartup ()
#7 0x77e7847c in ProcessIdToSessionId () from /cygdrive/c/WINNT/system32/KERNEL32.DLL
誰かヒントお願いします!!
0385384
NGNG↓
void* result = &(buffer[index]);
だた、炒ってこよう。
0386384
NGNG誰かが realloc なんぞ使ってるからですた。
自分が使わないからって忘れ去った関数でも
こういう時は覚えておかなきゃ駄目ですね。
ありがとうございました。
0387デフォルトの名無しさん
NGNG0388384
NGNG単体で実行すると
7376101 [unknown (0x254)] ? 1244 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
7376256 [unknown (0x254)] ? 1244 handle_exceptions: Error while dumping state (probably corrupted stack)
っていうのがイパーイ出るよぉ!なんで?誰か教えてー。
0389デフォルトの名無しさん
NGNG同じ実行ファイルなのか?
./付け忘れてないか?
0390384
NGNG同じ実行ファイルですた。
というか解決しますた。malloc 内に fprintf 書いてますた。
fprintf が malloc を呼んでいるようですた。
gdb で実行すると fprintf は実行されないんですかね?
っていうか標準出力も標準エラー出力も何も出なかったんですが…。何故?
0391デフォルトの名無しさん
NGNGそうかあ?
malloc呼ぶような事してるかな・・・
つーか、mallocやらfreeやらのすげ替えじゃなくて、
覆う様な方法は駄目なの?
あと、そういうことするなら標準ライブラリの関数は呼んじゃ駄目だよ。
memcpy程度ならいいと思うけど。
cygwinじゃなくてmingwにしたら?
0392384
NGNG> malloc呼ぶような事してるかな・・・
よく考えたらフォーマット付文字列から可変個数の引数を受け取って出力するには
可変長の作業エリア必要ですた。スタックに確保する非標準関数もあった気がするけど…(なんだっけ、これも使わないから忘れちゃった)
> つーか、mallocやらfreeやらのすげ替えじゃなくて、
> 覆う様な方法は駄目なの?
リンカオプションの wrap なんちゃらっていうのを見つけたんですが、
リンカ生で使うとライブラリやらスタートアップルーチンやらが複雑でわけわかめなので
LD = g++
しちゃってて、隣家にオプション渡せないんですよ。どうしよう。
これ以外の方法だと、ライブラリが勝手に呼び出したりする部分は代えられないし、
自家製ヒープ管理の方がいざっていう時に無理矢理デバッグがしやすいので、
malloc/free ごと置き換えちゃえと。
> cygwinじゃなくてmingwにしたら?
最終的にビルドする時は mingw にするつもりだったりするんですが、
今回の件に関して cygwin と mingw に何か決定的な違いは?
0393デフォルトの名無しさん
NGNG-Wp,<options> カンマ区切りの <options> をプリプロセッサに渡す
-Wl,<options> カンマ区切りの <options> をリンカに渡す
0394386
NGNGありがとうございます。そういえばそんなオプションもありましたね。
ところで(cygwin GCC の) crt0.o のソースって c でしょうか? 汗でしょうか?
cygwin はソース等もほとんど DL してて、
ローカルのディレクトリ内すべてを crt0.c と crt0.s で検索したんですが
何も引っかかりません。取り忘れたソースなのかなぁ?
0395デフォルトの名無しさん
NGNGここらへんじゃない?
ttp://sources.redhat.com/cgi-bin/cvsweb.cgi/src/winsup/cygwin/?cvsroot=src
0396デフォルトの名無しさん
NGNGclass func {
public :
template<class T, class M>
func(T, *T::M()){}
};
main()
{
func f();
}
% g++ test.c
test:c5: type specifier omitted for parameter `
Internal compiler error: Error reporting routines re-entered.
Prease submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instractions.
% g++ --version
g++ (GCC) 3.2.1 [FreeBSD] 20021119 (release)
Copyright (C) 2002 Free Software Foundation, Inc.
This is freesoftware; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
これはなんすか...?
0397386
NGNGありがとうございます。おかげでだいぶ理解が進みました。
で、ソースを見てわかったのですが cygwin_crt0 からは処理が戻ってこないのですが
プロセスが終了する本当に直前(システムに戻り値を返す直前、各種終了処理等も終わった後)に
呼び出される関数を作りたいとしたら、スタートアップコードを自作(というかカスタマイズ?)するしかないのでしょうか?
>>396
拡張子が .c にも関わらず C++ で書いてあるソースファイルと、そのコンパイル結果だと思いますが。
.cpp .cc .cxx などにリネームしてみては?あとはメンバ関数ポインタの書式はそれでいいんだっけ?
0398デフォルトの名無しさん
NGNG3.2.2では直ってる。
0399デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/unix/1055250582/
0400デフォルトの名無しさん
NGNG| (1<<x) とか & ~(1<<x) みたいに
ビット演算で1ビットしか操作してないのをハケーンしたら
各CPUのビット操作専用命令を
0401デフォルトの名無しさん
NGNG0402386
NGNGすんません。ありがとうございます。
で、libc 全般に関する質問はこっちで OK ですよね?
もともと終了直前に処理がしたかったのはヒープ管理部分の終了処理が終わった後に
free が呼ばれていたからなのですが、
よく考えたらそれって C ランタイムの終了処理が走ってるって事ですよね?
そこで、Cランタイムの終了処理関係がわかればいい案が浮かぶかもと思ったのですが
「libc 終了処理」などでググってみてもそれっぽいのが出てきません。
何か勘違いしているのでしょうか?検索キーワードの選び方が悪いのでしょうか?
0403デフォルトの名無しさん
NGNGatexit使って終了処理起動しているとか。
強引にexit(2)呼んで、通常の終了処理を無視すると言うのもあるけど、
Cygwinで通用するかどうかわからんしなあ。
0404386
NGNGいや、Cランタイムの終了処理をなくしたいわけじゃないんです。
目的は malloc の置き換えなので、せっかくならデバッグ時には
リークの報告とかも出力したいし、それを考えると
「Cランタイムの終了処理後にヒープの解放をしたい」
という事なのです。
0405386
NGNGソースの crtstuff.c と nm の結果からとりあえず
___do_frame_init あたりをリンク時にラップすればいいやと思ったのですが
うまくいきません。
ソースに
extern "C"{ void __wrap___do_frame_init(void); }
ビルド時に -Wl,--wrap,__do_frame_init
でいけるかなと思ったんですが、ダメで、実行ファイル内に
__wrap___do_frame_init がそのままの名前(当然先頭にもう一個_はついてるでしょうけど)で残っちゃってる状態でした。
で、malloc とかはオブジェクトファイルに定義しておくとライブラリの方じゃなくて
オブジェクトファイルに入っている方使ってくれるみたいなので、同じようにすれば大丈夫かな?と思ってやってみたら
やっぱり多重定義でリンクできませんでした(オブジェクトファイル同士なのだから当然…でしょうね)。
こんな感じでどうしたらいいのかまたわからなくなってしまいました。
というか、基本に返ってもう一度質問しなおします。
GCC で malloc/free を独自の実装に置き換える場合に
初期化処理と終了処理を行うにはどうしたらいいのでしょう?
よろしくお願いします。
0406デフォルトの名無しさん
NGNGいいかげん帰れ
あのなまずUNIXでためせ
んで成功して
cygwinでだめだったらWindowsのcrt側の問題だろ
UNIXのシステムコール(sbrk)=WIN32APIじゃないんだから
0407デフォルトの名無しさん
NGNGあとcygwinはlibc(GNU)じゃなくでnewlib(RedHAT)
cygwinのスナップのソースぐらいダウンしてながめてこいよ
0408386
NGNGせっかく親切にアドバイスをくれている方に対して失礼なのはわかっているのですが
>あのなまずUNIXでためせ
ここが cygwin のスレでは無い事はわかっています。
が、UNIX のスレでもないですよね。GCC のスレですよね?
>UNIXで(中略)成功してcygwinでだめだったらWindowsのcrt側の問題だろ
>UNIXのシステムコール(sbrk)=WIN32APIじゃないんだから
いや何か誤解されているというか、後半部分の意味がわかりません。
独自実装部分は sbrk ではなく Win32API の VirtualAlloc 使ってますが、
それとこれとは全然関係ないというか…。やはり >>406 さんが
私の質問を誤解されているとしか思えないのですが。
>>407
別物なのですね、正直知りませんでした。ありがとうございます。
ソースはCVSとかで取ってきたやつではなく cygwin のセットアップで取ってきた物を
何がなんだかわからず推測でファイル名とかを検索してみていたので…。
0409デフォルトの名無しさん
NGNGgccとなんも関係ないライブラリ依存な話だから
スレ違いだって言ってるのわからない?
死ねよ>>386
0410386
NGNGごめんなさい。わからないです。
何にも調べずに全部人にきくのが良しとされない文化なのはわかっていますが、
私なりに精一杯調べて、それでもここで聞くのが正しいと思ったのです(それが私の間違いだったとしても)
どこまでがライブラリの話で、どこまでがコンパイラやリンカの話なのか区別のつかない私の無知が悪いのですが、
私の質問の内容が「gccとなんも関係ないライブラリ依存な話」というのがまだ理解できていないので
お気に入りのスレをもう私に汚されないためにも、最後のアドバイスを頂けませんか?
GCC で malloc/free を独自の実装に置き換える場合に
初期化処理と終了処理を行うにはどうしたらいいのでしょう?
この質問に正しく答えてもらう為の質問場所はたとえばどこでしょう?
cygwin のスレですか?私なりの判断ではこれは違うような気がしているのです。
他のスレッドで適切な場所も思いかびません。
苦手な英語を一語一語訳しながら海外のサイト等も見て回りましたが、本当にわからないのです。
よろしくお願いいたします。
0411デフォルトの名無しさん
NGNG//#include <unistd.h>
typedef long Align;
union header {
struct {
union header *ptr;
unsigned size;
}s;
Align x;
};
typedef union header Header;
void *malloc(unsigned nbytes);
void free(void *ap);
static Header *morecore(unsigned nu);
static Header base;
static Header *freep=NULL;
void *malloc(unsigned nbytes)
0412デフォルトの名無しさん
NGNGHeader *p,*prevp;
Header *morecore(unsigned);
unsigned nunits;
printf("malloc->%d\n",nbytes);
nunits = (nbytes+sizeof(Header)-1)/sizeof(Header)+1;
if((prevp = freep ) == NULL){
base.s.ptr=freep = prevp=&base;
base.s.size=0;
}
for(p=prevp->s.ptr;;prevp=p,p=p->s.ptr){
if(p->s.size >=nunits){
if(p->s.size == nunits)
prevp->s.ptr = p->s.ptr;
else{
p->s.size -= nunits;
p+=p->s.size;
p->s.size=nunits;
}
freep = prevp;
return (void *)(p+1);
}
if( p==freep)
if((p = morecore(nunits)) == NULL)
return NULL;
}
}
0413デフォルトの名無しさん
NGNGstatic Header *morecore(unsigned nu)
{
char *cp,*sbrk(int);
Header *up;
if(nu <NALLOC)
nu = NALLOC;
cp = sbrk(nu * sizeof(Header));
if(cp == (char *) -1)
return NULL;
up=(Header *)cp;
up->s.size=nu;
free((void *)(up+1));
return freep;
}
void free(void *ap)
{
Header *bp,*p;
printf("free->%p\n",ap);
bp=(Header *)ap-1;
for(p=freep; !(bp > p && bp < p->s.ptr);p=p->s.ptr)
if(p >= p->s.ptr && (bp > p || bp < p->s.ptr))
break;
if(bp + bp->s.size == p->s.ptr){
bp->s.size += p->s.ptr->s.size;
bp->s.ptr = p->s.ptr->s.ptr;
0414デフォルトの名無しさん
NGNGbp->s.ptr = p->s.ptr;
if( p +p->s.size==bp){
p->s.size+=bp->s.size;
p->s.ptr=bp->s.ptr;
}else
p->s.ptr=bp;
freep = p;
}
0415デフォルトの名無しさん
NGNG| ‖ (゚∈゚* ) ─_____ ___
|∧ 从ノ (ミ_(⌒\ ヽ _ ___
( (≡ ̄ ̄ ̄ ̄三\ ⌒ノ ノ)
|(つWつ  ̄ ̄\ ⌒彡) ノ =_
| \つ-つ \,__,ノ ノ
| | ) / / ≡=
0416デフォルトの名無しさん
NGNG0418386
NGNG終了処理はないですよね?それに初期化は初めて呼び出されたときでもいいのですが
終了処理は適切なタイミングでやらないと駄目ですよね?(悩んでいる理由はこれです)
0419デフォルトの名無しさん
NGNG#define malloc my_alloc
#define free my_free
0420デフォルトの名無しさん
NGNG壮大な勘違いをしてるとしか思えん>386
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNGmalloc/freeの数の不一致を調べたいだけなら
かんky
0425デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/ml/gcc/2003-07/msg01477.html
0426386
NGNG>>420
目的をちゃんと書いたら正しい所に誘導してもらえますか?
・C++ で書いたヒープ管理クラス(デストラクタにて終了処理あり、確保した資源を OS に返す)があり、
色々な所で色々な生存期間で使っているので、終了処理は必須です。
・上記クラスをつかってmalloc/free/reallocを置き換えたいと思いました。
malloc はグローバルオブジェクトのコンストラクタより前から使われるようなので
ヒープ管理クラスはグローバル変数にはできず、malloc 内の static にし、
(freeからヒープ管理オブジェクトにアクセスできるように)malloc の呼び出し時に
グローバルなヒープ管理オブジェクトへのポインタを設定するようにしました。
(やりたい事1:もっとよい初期化のタイミングがあれば、malloc 呼び出し毎の無駄なポインタへの代入が防げます)
・free は関数内 static なオブジェクトのデストラクタ呼び出しより後にも使われているらしく
現状の方式だと、ヒープ管理オブジェクトが OS へメモリを返した後でも、まだそのメモリが有効だと思い
使っている部分があるようなのです。その為にプログラム終了直前に SIGSEGV で落ちます。
(やりたい事2:ヒープ管理クラスが OS へメモリーを返していいタイミングがあれば、セグメンテーションフォルトを起こさなくできます)
やりたい事2が本命なのですが、貼り付けてもらった K&R本 などの実装では、明示的にOSにメモリを返していません。
この実装ではたしかにこの問題は起こりません。
しかしこの場合はヒープ管理クラスから終了処理をはずすわけにはいかないのです。
(もっとずっと短い生存期間でも使用している為に単純に終了処理を無くすと、OS から確保したメモリをリークしている事になります。)
この為に初期化と終了処理のタイミングを探して
スタートアップルーチン/Cランタイム内の置き換えられそうな関数などを探していたのですが
スレ違いだから出て行けと言われてしまっています。
私には本当にここよりこの質問に適したスレというのがわかりません。
どなたかよろしくお願いいたします。
0427デフォルトの名無しさん
NGNGC++のクラスでmalloc/freeを置き換えようと思うのが既に間違っているような気がしますか…
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNGCVSではとっくの昔に3.4に逝ってるんだがなぁ
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNGコンパイラのバグは泣けるので、じっくりデバッグしてほしいけどねえ。
落ちる位ならいいんだけど、嘘のコード吐かれた日には…
0432デフォルトの名無しさん
NGNGがいってるのはlibstdc++の問題じゃないのか?
C++とは逝ってないだろお前シネヨ
gcc/ld/nm/objdump
の使い方勉強して来い
0433426
NGNG実装の詳細なので、C++ のクラスなのは関係ないと思うんです。
(と書くと、デストラクタが実行されるのが問題なんだろと思われるかもしれませんが、
呼び出されないようにする方法自体はあるので、
そうではなく終了処理を行うタイミングが見つけられないのが問題なんです)
>>428
仰られてる中での用語の定義がよくわからないのでなんとも言えないのですが
「メモリアロケーションの為のオブジェクトをグローバル変数にしたい」のではなくて
(繰り返しになりますが)初期化処理と終了処理を行うタイミングが欲しいのです。
>>432
>libstdc++の問題じゃないのか?
どうしてこう思われたのか教えていただけると、質問のしかた等の参考になるので助かります。
>C++とは逝ってないだろお前シネヨ
なんだかこのスレは死ね死ね仰る方が多いようですね^^
あとGCCはGNU Compiler Collectionですよね。UNIXでCコンパイラを使われている方だけが
GCCを使っているというわけではないですよね。
>gcc/ld/nm/objdumpの使い方勉強して来い
勉強不足に関してはご指摘真摯に受け止めることにします。
0434デフォルトの名無しさん
NGNGライブラリのmallocまで置き換えたい理由は何だ?
cygwin環境でそれをすることの意義がわからん。
それでもやるなら、
まずcrt0書け。そして起こった問題をひとつずつ潰していけ。
0435426
NGNG$ objdump -S /lib/crt0.o
/lib/crt0.o: file format pe-i386
Disassembly of section .text:
00000000 <_mainCRTStartup>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 08 sub $0x8,%esp
6: a1 00 00 00 00 mov 0x0,%eax
b: 85 c0 test %eax,%eax
d: 74 01 je 10 <_mainCRTStartup+0x10>
f: cc int3
10: d9 7d fe fnstcw 0xfffffffe(%ebp)
13: 66 8b 45 fe mov 0xfffffffe(%ebp),%ax
17: 25 c0 f0 ff ff and $0xfffff0c0,%eax
1c: 66 89 45 fe mov %ax,0xfffffffe(%ebp)
20: 66 8b 45 fe mov 0xfffffffe(%ebp),%ax
24: 0d 3f 03 00 00 or $0x33f,%eax
29: 66 89 45 fe mov %ax,0xfffffffe(%ebp)
2d: d9 6d fe fldcw 0xfffffffe(%ebp)
30: 83 ec 0c sub $0xc,%esp
33: 68 00 00 00 00 push $0x0
38: e8 00 00 00 00 call 3d <_mainCRTStartup+0x3d>
3d: c9 leave
3e: c3 ret
3f: 90 nop
0436デフォルトの名無しさん
NGNG立場分かってねーな
0437433
NGNG>ライブラリのmallocまで置き換えたい理由は何だ?
色々とあるのですが、何か(プログラム上の)問題が起こったときに
ライブラリのmallocまで含めて疑う事が多いので
>まずcrt0書け。
cygwin の crt0 はFPUの設定と DLL 内の cygwin_crt0 の呼び出しだけなので…
(すでに書きましたが、cygwin_crt0からは処理が戻ってこないので…)
ぶっちゃけ言えば「Cランタイムの初期化と終了をのっとって、独自の処理をした後にもともとの初期化と終了処理にバイパスする方法を教えてください」
なのですが。
さすがに cygwin1.dll 全部を書き直せというのは…
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG0441433
NGNGうるさい馬鹿
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNGそれで全て丸く収まる
0446デフォルトの名無しさん
NGNGよくやった!これで君のレスを見ないで済む
GCC で malloc/free を独自の実装に置き換える場合に
初期化処理と終了処理を行うにはどうしたらいいのでしょう?
よろしくお願いします。
>>448
私の今までの発言には関数名の後にUNIXのマニュアルの分類みたいの入れてないんですよ。
残念でしたね。UNIX親父さん。
0450デフォルトの名無しさん
NGNG旨いゆで卯の作り方だ。
まず、生卯を用意する。
普通は鮮度が良い程良いのだが、この調理法では古い卯でも旨くなるのであまり気にしなくて良い。
次に電子レンジに生卯を入れる。この時注意して欲しいのは
●皿を使わず、直にターンテーブルの上に置く。
●ラップ等で包まず裸のまま入れる。
●卯は1個より3〜4個置いたほうが旨くなる。
あとは、電子レンジを回して3分程チンするだけだ。(500W時)
実際に茹でてないので厳密には茹で卯とは言えないが、そこはご愛嬌。
今までの卯料理とは段違いの旨さ、ふわふわ感なので是非試してくれ。
因みに食すときは酢醤油をお勧めする
最近親がパソコンを始めたのでルーターで分けて使っていた。
弟もパソコンを始めるらしい、500~600kbpsぐらいなので少々厳しかった
それで親が一括してプロバイダー契約してもいいといってたし
YBBのモデムレンタル契約改正で踏ん切りがついて解約した。
自分の住んでいる場所は電話線収容局から4.5kmも離れていてADSLに適していないことは
十分解っていたのでBフレッツにしようとした。Bフレッツのサービス提供地域に入っていたが
しかし家の近くの電柱にはあの光ケーブルの四角い箱(クロージャ)がぶら下がっていない。
NTTに電話したら3ヶ月ぐらいまたされそうな感じだった。
仕方なく地元ケーブルにした、グローバルIPだし検索してP2P規制の情報もなかったので大丈夫だろ
うと方をくくっていた。しかしポート警告の嵐でほとんど出来ない。
おまけに1年以内に解約すると工事費1万円取られる。
気がくるわんばかりだ・・・・
0452デフォルトの名無しさん
NGNGご愁傷様。無線でしのいでくれ。
次!
0453386 ◆df.Iblvm9w
NGNG最近親がプログラミングを始めたのでgcc2.9/3.2で分けて使っていた。
弟もパソコンを始めるらしい、gcc3.4ぐらいなので少々厳しかった
それで親が一括してDebian契約してもいいといってたし
GNUのコンパイラ契約改正で踏ん切りがついて解約した。
自分の住んでいる場所はmallocから4.5kmも離れていてx86FPUに適していないことは
十分解っていたので独自のmallocにしようとした。Redhatのnewlibサービス提供地域に入っていたが
しかしAtomakeの近くのスクリプトにはあのperlの*(クロージャ)がぶら下がっていない。
2chに電話したら3ヶ月ぐらいまたされそうな感じだった。
仕方なく地元ケーブルにした、グローバルIPだし検索してP2P規制の情報もなかったので大丈夫だろ
うと方をくくっていた。しかしポート警告の嵐でほとんど出来ない。
おまけに1年以内に解約すると工事費1万円取られる。
気がくるわんばかりだ・・・・
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNG狂ってよし!
次!
0456◇9ThjVJlmbU
NGNG0457あぼーん
NGNG0458デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/unix/992942337/
Cygwin使っている人いますか? Part2
http://pc2.2ch.net/test/read.cgi/win/1052361218/
Cygwin使っている人いますか? その9
http://pc.2ch.net/test/read.cgi/unix/1055250582/
たがいにやくだて ありがとう たすけられたり たすけたり
じょうずな かいもの シージーシー てかごかたーての かおなじみ
やすくて おいしい しなえらびー しらせーられたりしらせたり
あなたもわたしも シージーシー つくるひとうるひと たべるひと
たがいにやくだて ありがとう たすけられたり たすけたり
べんりに つかおう シージーシー あれこれ なやみの ショッピング
やすくて ほうふな しなぞろえー おしえーられたりおしえたり
0460デフォルトの名無しさん
NGNG___ クルッ… / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ || ̄ ̄|| <⌒ヽ )) < >>459 はてさて、
| ||__|| < 丿 | どこを縦に読みゃいいんだ?
| ̄ ̄\三⊂/ ̄ ̄ ̄/ \___________
| | ( ./ /
0461あぼーん
NGNG0462あぼーん
NGNG0463デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/unix/992942337/
Cygwin使っている人いますか? Part2
http://pc2.2ch.net/test/read.cgi/win/1052361218/
Cygwin使っている人いますか? その9
http://pc.2ch.net/test/read.cgi/unix/1055250582/
0464デフォルトの名無しさん
NGNG非可逆圧縮でグロ化
0465あぼーん
NGNG0466デフォルトの名無しさん
NGNG1 言ってる意味が全く伝わってない
2 やりたい事も意味不明
3 レスの内容が泥沼過ぎる
処方箋
1 あなたの問題は、あなた個人の問題であり、あなた以外の人は知りません
それを前提に、今までの説明で、その問題が本当に伝わっているのか、レスを見直しましょう
2 多くの問題は、あなた自身のプログラムのミス(バグや方向性)から生まれています
何が問題なのかを1から考え直し、1つ1つ解決して行きましょう
3 あなたのせいで、コレだけスレが荒れてしまいました
意思の疎通が上手く出来ないと、いくら書き込んでも、同じ結果しか生まれません
考えを整理し、要点をしぼってから、書き込むよう心掛けましょう
0467あぼーん
NGNG0468あぼーん
NGNG0469デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNGWindows上で、あるDLLの内部で使われてる関数を外部から置き換えたいってことなのか?
ならシステムの仕様上、不可能ってのが答えだが。
少なくともgccとはこれっぱかしも関係がある話には見えない。
0472デフォルトの名無しさん
NGNGと独り言。
0473デフォルトの名無しさん
NGNGとりあえずlibcのソースを見ろと。
0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG#486が何言ってくれるか期待。
0478477
NGNG0479
NGNGコンストラクタ側は必要になった時点で初期化、
終了処理は atexit で良いと思うけど。。。
0480デフォルトの名無しさん
NGNGCPUのことだと思ったんだが…
0482デフォルトの名無しさん
NGNGお前は間違ってない。
0483デフォルトの名無しさん
NGNGCPUのこと言ってるなら、こんなこと書かんと思っただけ。
まあ気にするな。
0484デフォルトの名無しさん
NGNG今は886だ。
0485デフォルトの名無しさん
NGNGOpteron?
あれはK8と呼ぶかなぁ
0486デフォルトの名無しさん
NGNG0487486
NGNGちょっと読んでる間に485書いてたのね…(´・ω・`)ショボーン
0488デフォルトの名無しさん
NGNG最近親がパソコンを始めたのでルーターで分けて使っていた。
弟もパソコンを始めるらしい、500~600kbpsぐらいなので少々厳しかった
それで親が一括してプロバイダー契約してもいいといってたし
YBBのモデムレンタル契約改正で踏ん切りがついて解約した。
自分の住んでいる場所は電話線収容局から4.5kmも離れていてADSLに適していないことは
十分解っていたのでBフレッツにしようとした。Bフレッツのサービス提供地域に入っていたが
しかし家の近くの電柱にはあの光ケーブルの四角い箱(クロージャ)がぶら下がっていない。
NTTに電話したら3ヶ月ぐらいまたされそうな感じだった。
仕方なく地元ケーブルにした、グローバルIPだし検索してP2P規制の情報もなかったので大丈夫だろ
うと方をくくっていた。しかしポート警告の嵐でほとんど出来ない。
おまけに1年以内に解約すると工事費1万円取られる。
気がくるわんばかりだ・・・・
0490デフォルトの名無しさん
NGNGちょとワラタ。
がんがれ。
0491デフォルトの名無しさん
NGNGうちにあるよ
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNGPen4
786はキャンセルされた。
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG964かなぁ
フックするような仕組み等はないか?という質問だったのです。
(cygwin の GCC では)malloc/free などは、同名の関数を定義しておくだけで、DLL ではなくそちらを
使うようにしてくれるみたいなので。
>>473
libc のスレを立てろと仰るのですか?単発でなんでも立てるのは板全体への迷惑な気がします。
私の判断では一番関連性があると思ったのはここなのです。
一番関連が深いのがここであるという判断に間違いはありますか?と何度も聞いているのですが、
「死ね出て行け」以外の返答は頂けておりません。
ご指南の通り newlib のソースについては今回スナップショットを改めてDLして探ってみました。
やはり大変有益でした。ありがとうございます。
>>474
ありがとうございます。
>>479
上の方でも書いていますが atexit で登録では実行されるのが早すぎるのです。
続く
で、>>473 のご指摘にもあるように、昼間仕事サボりながら
cygwin のスナップをDLし、再度いろいろと探ってみました。
初期化処理に関しては cygwin レベルで premain という独自の初期化処理を引っ掛けるスタブ関数が用意されているようだったのですが、
スタブ自体(premain0 - premain3)のオーバーライド(-wrap 指定や同じ名前の関数をオブジェクトに含める)はうまくいかず、
かといって登録されている関数ポインタはどこからどう上書きしていいのか結局わかりませんでした。
終了処理に関しては通常の終了時は必ず(Cランタイムの) exit が呼ばれるようで
そこから _exit (C99の関数?) -> SYS_exit (POSIX API?) -> do_exit(POSIX API?)
のような流れになっているようで(正確に言うと SYS_exit から do_exit へはソース上では追えなかったので予想です)
exit で atexit 登録関数の実行、 _exit でグローバルデストラクタの実行
それ以降は(cygwin自体のもの以外の)終了処理っぽいものをしているようには見えませんでした。
結果からすると私の「Cランタイムの初期化処理と終了処理がどこかにあるはず」という予想自体がハズレだったという事で
それをラップしたりフックしたりする事はそもそも不可能なのだという結論にたどり着きました。
みなさんありがとうございました。
荒らしを呼び起こしてしまった事については、その他の善良な方々に対して深くお詫び申し上げます。すみませんでした。
0498デフォルトの名無しさん
NGNG0499デフォルトの名無しさん
NGNGMac OS X に gdb が入ってるんですけど、CUI なんです。
Cygwin だと特に何もしなくても GUI になってくれたんですけど、
Mac OS X では GUI にはならないんでしょうか?
0500デフォルトの名無しさん
NGNGcygwinの奴はTkをつかったRedhatのinsightがかってに起動するようになってる
gdbは基本的にCUI
0501デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGWINAPIの _mkdir みたいなやつ
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNG00125669 R _nl_default_dirname
000d61f0 W chdir
000a9a30 W closedir
000aa920 T dirfd
000e20f0 T dirname
000d6230 W fchdir
000d63e0 T get_current_dir_name
000ab310 T getdirentries
000ab370 T getdirentries64
000d54a0 W mkdir
000a9830 W opendir
000a9aa0 W readdir
000aa930 T readdir64@@GLIBC_2.2
000aaa20 T readdir64@GLIBC_2.1
000aab00 T readdir64_r@@GLIBC_2.2
000aaca0 T readdir64_r@GLIBC_2.1
000a9b80 W readdir_r
000a9d30 T rewinddir
000d7330 W rmdir
000a9e40 T scandir
000aae50 T scandir64@@GLIBC_2.2
000ab050 T scandir64@GLIBC_2.1
000a9db0 T seekdir
000a9e30 T telldir
0506
NGNGBOOL CreateDirectory(
LPCTSTR lpPathName, // directory name
LPSECURITY_ATTRIBUTES lpSecurityAttributes // SD
);
OS は Windows だと仮定してみた。
0507デフォルトの名無しさん
NGNGちゃんと書いとけばよかった。
OSは、linux です。
0508_
NGNG0509デフォルトの名無しさん
NGNG名前
mkdir - ディレクトリを作成する
書式
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
説明
mkdir は pathname で示される名前のディレクトリを作成する。
mode には作成されるディレクトリの許可属性(permission)を設定する。この設
定は通常通りプロセスの umask によって修正され、作成されたファイルの許可
属性は (mode & ~umask) となる。
新 し く作成されたディレクトリの所有者はプロセスの実効 UID にセットされ
る。新たに作られたディレクトリを保持する親ディレクトリで set group id
ビットがセットされていたり、ファイルシステムが BSD のグループセマンティ
クスに従ってマウントされている場合には、新しいディレクトリのグループ 所
有 権は親ディレクトリのグループ所有権を継承する (親ディレクトリと同じに
なる)。そうでなかった場合の所有グループはプロセスの実効 GID となる。
もし親ディレクトリに set group id ビットがセットされていれば新しく作 成
されるディレクトリにも set group id ビットがセットされる。
返り値
mkdir は成功した場合 0 を、失敗した場合 -1 を返す(失敗した場合 errno が
エラーの内容にしたがってセットされる)。
0510デフォルトの名無しさん
NGNGEPERM pathname を含むファイルシステムがディレクトリの作成をサポート し
ていない。
EEXIST pathname が既に存在している(ただしそれがディレクトリであるとは限
らない)。 pathname がシンボリックリンクの場合も (その指定先が 存
在するかどうかに関らず)エラーになる。
EFAULT pathname がそのプロセスのアクセス可能なアドレス空間の外を指して
いる。
EACCES プロセスが親ディレクトリへの書き込み許可を持たない。 も し く は
pathname 中のディレクトリのどれかに検索 (実行) 許可属性が無い。
ENAMETOOLONG
pathname が長すぎる。
ENOENT pathname 中のどれかのディレクトリが存在しないか、またはリンク先
の無いシンボリックリンクである。
ENOTDIR
pathname 中のディレクトリ部分が実際にはディレクトリでない。
ENOMEM 十分なカーネルメモリが無い。
EROFS pathname が読み出し専用ファイルシステム上のファイルを指 し て い
る。
ELOOP パス名 pathname を解決するときに、含まれているシンボリックリンク
が多すぎた。
:
0511デフォルトの名無しさん
NGNGい。 もしくはユーザーのディスク quota が使い切られているため、新
たにディレクトリを作成することができない。
準拠
SVr4, POSIX, BSD, SYSV, X/OPEN。SVr4 には他に EMULTIHOP と ENOLINK エ
ラー コードについての記述がある。 POSIX.1 には ELOOP についての記述はな
い。
NFS を実現しているプロトコルには多くの不備が存在し、それらのいくつか は
mkdir に影響を与える。
関連項目
mkdir(1), chmod(2), mknod(2), mount(2), rmdir(2), stat(2), umask(2),
unlink(2)
Linux 1.0 29 March 1994 MKDIR(2)
(END)
0512デフォルトの名無しさん
NGNG/@'ノ_.ヾ) グッジョブ!
/C’" _ゞ))
ノ_(( `ー, (;( n
;/ )) ., ヽ:) /ミ)
/ (( ヽ_ ))//
/ -、.)⌒' ソ./
~~~~~~~`jii〉 ~ 〈 ~~~~~~~~~~
0513デフォルトの名無しさん
NGNGこういうことやって探せばみつかるんだよカスが
じぶんでさがせや
1027 ls /usr/include/linux/
1028 ls /usr/include/sys
1029 grep mkdir /usr/include/sys*
1030 grep dir /usr/include/sys*
1031 grep make /usr/include/sys*
1032 grep make /usr/include/sys/*
1033 grep dir /usr/include/sys/*
1034 mkdir
1035 man 3 mkdir
1036 man mkdir
1037 man 2 mkdir
0514デフォルトの名無しさん
NGNG`mkdir'という名前が判ってないと探せないね。
0515デフォルトの名無しさん
NGNGどうもありがとうございました。
>513
そういう探し方があるのね 勉強になりますた。
0516デフォルトの名無しさん
NGNG0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNGLinux板のVineスレに帰れ。
0522山崎 渉
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/
0526デフォルトの名無しさん
NGNGグーぐるの日本語ページ
0528519
NGNGうっ・・・!
0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNG>>1
0531デフォルトの名無しさん
NGNGCVSの使い方がわからないなら
http://mirrors.rcn.net/pub/sourceware/gcc/snapshots/
0533デフォルトの名無しさん
NGNGなにがしたいのかよくわからんが一番新しいのはこれ
ttp://mirrors.rcn.net/pub/sourceware/gcc/snapshots/3.4-20030730/gcc-3.4-20030730.tar.bz2
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGhttp://www.google.co.jp/
0537デフォルトの名無しさん
NGNGK&Rに頑なに拘るBSDとは大違いというか。
0539デフォルトの名無しさん
NGNGできません
終わり
0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNGGCCの拡張仕様がC99に取り込まれただけのような気もしますが。
>>538
手を入れないと無理だろう。
0543デフォルトの名無しさん
NGNGcygwin の setup.exe でダウンロードできるものじゃ不満か?
0545デフォルトの名無しさん
NGNGLatest News:
Candidate: MinGW-3.0.0-rc4.exe
earnie - 2003-08-05 04:45
0547デフォルトの名無しさん
NGNG大量ですね
釣りご苦労酸でした
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNG「考慮される再実装(案)」
持ってても一般人には意味がないですよ。
0552デフォルトの名無しさん
NGNGアンドル
スアミア
リチャードギア
が開発したプログラム解析プログラム
v5はゴミ
0553デフォルトの名無しさん
NGNGBSDはもはやgcc(拡張)でないとコンパイルできないと思うぞ。
0554デフォルトの名無しさん
NGNGということはK&Rスタイルに拘るBSDはフェイクということですか?
それとも、古いバージョンのGCC(C89すらサポートしていない、って
そんなのあるの?!)に対応するためですか?
まあ文化の一つなのかもしれないけど。
0555デフォルトの名無しさん
NGNGGNUライセンスを敵視している人、BSDこそが本流だと思っている人の中に、
POSIX, X/Open, ANSIに合わせることを拒絶している人たちがいる。
ただ、その人たちもK&Rなpccを維持することができなくなって、
泣く泣くgccを標準のコンパイラにしている。
ちゃんとしたANSI Cじゃないとコンパイルできないソースが他所様で増えてきたし、
多くのCPUをサポートするのは人手のかかることなので。
大昔のMLを参照のこと。いじょ
0556デフォルトの名無しさん
NGNGBSD派の人が強い拘りを持っているのは知ってますが、
そういったものが無ければ、当然システムに
一貫性を持たせられないでしょうね。
tendraなんていうBSDライセンスのコンパイラがあるけど、
*BSDはこの先もずっとGCCと一身同体なんですかね。
現状FREENIXのシステム用コンパイラとしてはGCCしか考えられない
感じですが、オルタネイティブ勢にも頑張って欲しいところですねえ。
0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGそんなのごく一部。FreeBSD なんかシステムコンパイラをあっさり gcc 3.x
に載せ替えて、しかも C89 ではなく C99 でビルドするようになってるし。
The FreeBSD C99 & POSIX Conformance Project
http://www.freebsd.org/projects/c99/
ただシステムコンパイラとして gcc 以外のものを使うのは、さすがに
難しいだろうなあ。
0560デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/gcc-3.3/changes.html#3.3.1
どれひとつとして遭遇したことがないバグなのは使い込んでない証拠なのでしょうか(w
0561デフォルトの名無しさん
NGNGThe preprocessor no longer accepts multi-line string literals.
0562_
NGNG0563デフォルトの名無しさん
NGNGウチも、インラインアセンブラコードで修正必須なものが山ほど……。
まぁボチボチ手を付けておくか。
0564デフォルトの名無しさん
NGNGGCC 3.3.1 automatically places zero-initialized variables in the .bss section on some operating systems.
static T* table[ STATIC_MAX ]/* = {0}*/; // bss に逝って欲しい
こんなコメント付けなくてよくなるんだなぁ。
0565デフォルトの名無しさん
NGNG.bssがゼロクリアされないOSって何だろ。組み込み系とか?
OSがやってくれないにしても、バイナリにセクション情報があるのなら、
crt0 あたりで初期化しちまえばいい気もするんだけどなぁ。
0566デフォルトの名無しさん
NGNGまあ正しい方向に進むわけで。
諦めて直せ。
>>565
OS無しなら普通はcrt0でクリアします。
そうしないとstaticな変数の初期値が不定という恐ろしい状態に…
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNG> GCC 3.3.1 automatically places zero-initialized variables in the .bss section on some operating systems.
は、bssのあるOSでは、「zeroで明示的に初期化」してる場合もbssに置くよ、と言っている。
>>565は、bssにあるのにzeroで初期化しないOSがある、
と"some"の逆の"other"を考えて誤読している気がする。
"some OS"は、bssのあるOSのこと。
0569デフォルトの名無しさん
NGNGむしろ、「places 〜 in the .bss」を「initializes variables in the .bss」と勘違いしたと思われ。
0570565
NGNGint a = 0; が今まで .data に置かれてたのが
.bss に置かれるってことなのね。
0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
NGNG↑のバグが2002-09-14でfixedって書いてあるんですけど、
3.2〜3.3のfixed bugsリストには見当たらないようなんですが、
どうなってるんでしょうか?
cygwin の 3.2 20020927 (prerelease) では
添付されたコードがエラーにならないので、直ってないっぽいです。
0573デフォルトの名無しさん
NGNG除霊をしてあげるという男に乳もまれるはオマンコ触られるは挿入されるは・・・
本当に悪霊は退散したのでしょうか?こんな気持ちのいい除霊だったらいつでもOK!
制服好きならここ!
無料ムービーをどうぞ
http://www.pinkschool.com/
0574デフォルトの名無しさん
NGNGなにがわかんないの?
0575デフォルトの名無しさん
NGNG>Assigned To: Not yet assigned to anyone
なので、誰も直していないに一票。
なんでFixedになったか謎だけど。
そういやいつからBugzillaになったんだ?
前はGANTSだったような。
0576デフォルトの名無しさん
NGNGオカ板と間違えましたか?
こちらはプログラム技術板です。
0578574
NGNGインストールの時に「今、設定しますか?」見たいなのが出た時に、
y を押して、MinGW の場所を d:/MinGW みたいに入力しておいたら、
とりあえず gcc は使えない?
こっから先は、スレ違いな気分。
こんな事が聞きたいんでは無いような気がしてきますた。
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNG0584山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0585デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています