ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:sqrtを知らないと言われます) 問題点を指摘する 2012/09/11 20:00 このQ&Aのポイント sqrt関数の使用方法に問題がありますコンパイルエラーが発生しています不明な参照エラーが発生しています sqrtを知らないと言われます #include <stdio.h> #include <math.h> int main() { double x; for (x=0.0; x<=10.0; x+=1.0){ printf("The square root of %f is %f\n", sqrt(x)); } return 0; } をgcc -lm XXX.cでコンパイルしようとすると XXX.c:関数:'main'内: XXX.c:9:3: 警告:書式'%f'は対応した'double'引数が予期されます[-Wformat]/tmp/ccPq0KS7.o: In function 'main' XXX.c: (text+0x2d) undefined reference to 'sqrt' collect2: ldはステータス1で終了しました、 となります。相当な素人ですがどなたか問題点をご指摘いただければと存じます。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー notnot ベストアンサー率47% (4903/10364) 2012/09/11 21:26 回答No.2 >をgcc -lm XXX.cでコンパイルしようとすると 手元のversion 4.4.6では、gcc -lm xxx.c でも大丈夫でしたが、念のため、gcc xxx.c -lm でやってください。 質問者 お礼 2012/09/11 21:55 おお! うまくいきました。有難うございました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) ok-kaneto ベストアンサー率39% (1798/4531) 2012/09/11 20:25 回答No.1 >printf("The square root of %f is %f\n", sqrt(x)); 引数が1個たりないですね。%fが2個あるってことは、sqrt(x)だけでなく、xも出力するのでは? また、for文の変数をdouble型でやってしまうのは誤差があるので期待した回数だけ実行しない可能性があります。for文の変数自体はint型で行い、sqrtの引数として渡す時にdoubleへキャストした方が間違いないと思います。 質問者 お礼 2012/09/11 20:51 早速の回答大変有難うございます。 質問者 補足 2012/09/11 20:52 引数の件はお恥ずかしい次第でした。引数の追加では事情はかわりませんでした。 アドバイスですが、初めはxをint x;で宣言し、sqrt(double x)と書くのでしょうか? 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発C・C++・C# 関連するQ&A <math.h>があるのにsqrtが・・・ 最初にあるプログラムを作っていたのですが、その祭sqrtでエラーが出てしまったので、別にsqrtを使う短いプログラムを作りました。それが以下のものになります。(test3.c) 「 #include<stdio.h> #include<math.h> int main(void){ int atai; double x=2.0; atai=(int)sqrt(x); printf("atai is %c",atai); } 」 sqrtが動作するか確かめる為のものです。このプログラム(test3.c)で以下のエラーが出てしまいました。 「 /tmp/ccqEejZ1.o(.text+0x4d): In function `main': test3.c: undefined reference to `sqrt' collect2: ld はステータス 1 で終了しました 」 ちなみにLinux(Fedora core 4)を使用しています。 初心者ということもありなぜエラーが出るのか分かりません。 ちなみに<math.h>を使用しないプログラムは普通に動作します。 解決方法をご存知の方がいらっしゃいましたらご教授下さいませ。 よろしくお願いします。 C言語のpow関数の不具合 linux(ubuntu)の上でgccを使っています。 powの関数がおかしいです。 pow(10,-1)を計算させると正しく1e-1が出力されます。 #include <math.h> #include <stdio.h> int main(void){ double x = -1; printf("%f",pow(10,x)); return 0; } 上記のプログラムを走らせると、 In function "main"; *****.c:(.text+0x2d):undefined reference to 'pow' collect2: ldはステータス1で終了しました。 というエラーメッセージがでます。 なぜかpow関数の中に変数を入れるとプログラムが動きません。 PostgreSQLをC言語でアクセスしようと PostgreSQL 8.4.8 文書にのっているサンプルプログラムの 例 30-1. libpq サンプルプログラム 1 #include <stdio.h> #include <stdlib.h> #include "libpq-fe.h" ・・・・・・・・・・・・・ をコピペしてコンパイルしたところ次のようなエラーがでました # gcc sample.c /tmp/cctZBolQ.o: In function `exit_nicely': sample.c:(.text+0xd): undefined reference to `PQfinish' /tmp/cctZBolQ.o: In function `main': sample.c:(.text+0x4a): undefined reference to `PQconnectdb' sample.c:(.text+0x5a): undefined reference to `PQstatus' sample.c:(.text+0x6a): undefined reference to `PQerrorMessage' sample.c:(.text+0xa5): undefined reference to `PQexec' sample.c:(.text+0xb5): undefined reference to `PQresultStatus' sample.c:(.text+0xc6): undefined reference to `PQerrorMessage' sample.c:(.text+0xed): undefined reference to `PQclear' sample.c:(.text+0x105): undefined reference to `PQclear' sample.c:(.text+0x119): undefined reference to `PQexec' sample.c:(.text+0x129): undefined reference to `PQresultStatus' sample.c:(.text+0x13a): undefined reference to `PQerrorMessage' sample.c:(.text+0x161): undefined reference to `PQclear' sample.c:(.text+0x179): undefined reference to `PQclear' sample.c:(.text+0x18d): undefined reference to `PQexec' sample.c:(.text+0x19d): undefined reference to `PQresultStatus' sample.c:(.text+0x1ae): undefined reference to `PQerrorMessage' sample.c:(.text+0x1d5): undefined reference to `PQclear' sample.c:(.text+0x1ed): undefined reference to `PQnfields' sample.c:(.text+0x20f): undefined reference to `PQfname' sample.c:(.text+0x26b): undefined reference to `PQgetvalue' sample.c:(.text+0x2a8): undefined reference to `PQntuples' sample.c:(.text+0x2ba): undefined reference to `PQclear' sample.c:(.text+0x2ce): undefined reference to `PQexec' sample.c:(.text+0x2de): undefined reference to `PQclear' sample.c:(.text+0x2f2): undefined reference to `PQexec' sample.c:(.text+0x302): undefined reference to `PQclear' sample.c:(.text+0x30e): undefined reference to `PQfinish' collect2: ld はステータス 1 で終了しました # # find /usr/include/ -name libpq*.h /usr/include/pgsql/internal/libpq-int.h /usr/include/pgsql/server/libpq/libpq-be.h /usr/include/pgsql/server/libpq/libpq.h /usr/include/pgsql/server/libpq/libpq-fs.h /usr/include/libpq/libpq-fs.h /usr/include/libpq-events.h /usr/include/libpq-fe.h # gcc -I/usr/include sample.c でもおなじです どうすればコンパイル出きるようになるでしょうか? よろしくお願いします ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム LinuxのgccのLIBパス? (類似質問) Linuxのgccで、LIBのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。 例)gcc -I/usr/local/example/include test.c /tmp/ccOFpCBo.o(.text+0x26): In function `main': : undefined reference to `EXAMPLE_1' /tmp/ccOFpCBo.o(.text+0x37): In function `main': : undefined reference to `EXAMPLE_2' /tmp/ccOFpCBo.o(.text+0x48): In function `main': : undefined reference to `EXAMPLE_3' collect2: ld はステータス1で終了しました。 また、ldとはVC6++でいう LINKのことでしょうか? C+のsqrt icpcの過去問(http://www.deqnotes.net/acmicpc/3006/ja)で、答えを #include <cmath> #include <iostream> using namespace std; #define max 1000000 int main(){ //int max = 100; int a,d,n,number[1000010]; for(int i=0;i<max;i++){ number[i] = 1; } number[0]=0;number[1]=0; for(int i=2;i<=sqrt(max)+1;i++){ if(number[i]){ for(int j=i*2;j<max;j=j+i){ number[j] = 0; } } } while(cin >> a >> d >>n,a||d||n){ int count =0; for(int i=a;i<=max;i=i+d){ if(number[i]){count ++; if(count == n){cout << i << endl;break;} } } } } と書いたところ、PKUで Main.cpp F:\temp\11386803.6056\Main.cpp(15) : error C2668: 'sqrt' : ambiguous call to overloaded function math.h(581): could be 'long double sqrt(long double)' math.h(533): or 'float sqrt(float)' math.h(128): or 'double sqrt(double)' while trying to match the argument list '(int)' F:\temp\11386803.6056\Main.cpp(16) : error C2108: subscript is not of integral type というコンパイルエラーがでます。 sqrtの前後で型が違っているのは分かるのですが、具体的にどうなおせばよいかわかりません。 C言語コンパイラーエラーについて教えてください。 C言語でコンパイルができなくて困っています。 コンパイルをすると、 ----------------------------------------- test.c.20:undefined reference to `getcury' test.c:20: undefined reference to `getcurx' collect2: ld returned 1 exit status ----------------------------------------- と言うエラーが出てしまい、コンパイルが完了しません。 ソースは、「test.c」と言うファイルネームで、内容は ----------------------------------------- #include <stdio.h> #include <stdlib.h> #include <curses.h> int main (void) { int y = 0, x = 0; initscr(); getyx(curscr, y, x); printw("x = %d, y = %d", x, y); refresh(); getchar(); endwin(); return 0; } ----------------------------------------- です。 OSは、Windows7 Professional SP1 コンパイラーは、MinGW Ver5.1.6. で、コマンドは gcc -o test.exe test.c -lcurses です。 確かに、curses へはパスも通っており、リンクできているようなんですが、 エラーが出てしまいます。 どうすれば良いのかわからず、大変困っています。 だれかご存知の方、教えてください。 どうかよろしくお願い致します。 マイコンSHでSQRT(平方根)が使えません。なぜかしら? マイコンSHでSQRT(平方根)が使えません。なぜかしら? 開発環境はルネサスHEWです。 (SuperH RISC engine C/C++ Compiler Package V.9.03 Release 00) プログラムは下記のような簡単なものです。 リンクでエラーになります。 L2310 (E) Undefined external symbol "_sqrt" referenced in "ファイルネーム" 未定義ということのようですが,よくわかりません。 どなたかお助けください。 宜しくお願いします。 ------------- 記 ------------- #include <math.h> { double ret; ret=sqrt(4.0); ・ ・ } math.h C言語で以下のプログラムを打ちました #include <stdio.h> #include <math.h> main(){ printf("%f\n",sin(23.5)); } そして。下記の用に実行すると以下のようにエラーがでます。エラーからするにサイン関数が見つからない用な事いっているのですが、一体なん何んでしょう? ちなみに。OSはRed hut Linux 7.3です. % gcc -o sample sample.c /tmp/ccwod1zy.o: In function `main': /tmp/ccwod1zy.o(.text+0x17): undefined reference to `sin' collect2: ld returned 1 exit status cygwin gcc c99 での isnormal と strtold の使用 Cygwinのgccで-std=c99オプションを付けて 以下のコードをコンパイルしようとしています。 #include <stdlib.h> #include <math.h> int main() { isnormal(0.123); strtold("0.123", NULL); return 0 ; } $> gcc -std=c99 test_strtold.c ですが、コンパイルできず、2つの関数とも'undefined reference'になります。 -std=c99を付けてコンパイルする方法または この記述と同等の別の記述がありましたらご教授願います。 よろしくお願いいたします。 どうしてもできない!! このC言語でのプログラミングがsqrtのところで常にエラーしてしまいます。どこがおかしいのか、おしえてください。 問・三角形の三辺の長さを入力し、ヘロンの公式を利用して面積を求めなさい。 #include <stdio.h> main() { double a,b,c,s,S; printf("Enter 3 numbers"); scanf("%lf %lf %lf",&a,&b,&c); s=(a+b+c)/2; S=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area = %f\n",S); } [EOF] 常に表示されるエラー (1)In fuction `main': (2)type mismatch in implicit declaration for built-in function `sqrt' (3)undefined reference to `sqrt' お願いします。 Windowsコモンコントロールのcygwin/gccコンパイルエラー 以下のサイトのようなWindowsコモンコントロールのプログラムをcygwin/gccコンパイルするとエラーがでます。 (sourceのサイト) http://wisdom.sakura.ne.jp/system/winapi/common/common16.html (ビルドコマンド) gcc -mwindows -mno-cygwin -o main.exe main.cpp (エラー出力) undefined reference to `_ImageList_Destroy@4' undefined reference to `_InitCommonControls@0' undefined reference to `_ImageList_Create@20' undefined reference to `_ImageList_ReplaceIcon@12' undefined reference to `_ImageList_ReplaceIcon@12' collect2: ld returned 1 exit status make: *** [main.exe] Error 1 Windowsコモンコントロールを含んだプログラムをcygwin/gccコンパイルするにはどうすればよいでしょうか? コンパイルは出来ないのでしょうか? よろしくお願いします。 C言語の画像抽出 C言語のプログラムをコンパイルした時に ”/tmp/cchzThVk.o: In function 'c_to_sh': 5.c:(.text+0x5b3): undefined reference to 'sqrt' 5.c:(.text+0x64e): undefined reference to 'atan2' collect2: Id は ステータス1で終了しました。” とメッセージが出るのですが、このメッセージが出たときはプログラムにミスがあるということなのでしょうか。教えてくださいお願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 共有ライブラリ作成時の -L sub1.c sub2.cからlibsub1.so libsub2.soを作成し、main.cをコンパイルします。 いずれのファイルも/rootにあります。 ここで gcc -c sub1.c gcc -shared -o libsub1.so sub1.o gcc -c sub2.c gcc -shared -o libsub2.so sub2.o gcc -o main main.c libsub1.so libsub2.so だけでは [root@localhost ~]# ldd main linux-gate.so.1 => (0x0020d000) libsub1.so.1 => not found libsub2.so.1 => not found libc.so.6 => /lib/libc.so.6 (0x003e3000) /lib/ld-linux.so.2 (0x003c4000) でロードされていないので ln -s /root/libsub1.so /usr/lib/libsub1.so ln -s /root/libsub2.so /usr/lib/libsub2.so で/usr/libにシンボリックリンクを張る必要があります。 このリンクをはる作業をなんとかしてコンパイラのオプションを用いて省略したいとおもっています。 そこで gcc -o main main.c -L/root/libsub1.so -L/root/libsub2.so としたのですが /tmp/cc4Ccfom.o: In function `main': main.c:(.text+0x12): undefined reference to `print' collect2: ld はステータス 1 で終了しました make: *** [main] エラー 1 になってしまいました。 上の状況で質問は2つあります。 (1)gccのオプションを用いてシンボリックリンクを張る作業を省略するにはどうすればいいでしょうか?(私はーLの使い方を見よう見まねで用いたのですがまずかったようでエラーがでました。) (2)上のエラーは何が原因だったのでしょうか? ソースは //sub1.c #include "sub.h" int TEST=10; //sub2.c #include "sub.h" #include <stdio.h> void print(void) { if(TEST) printf("TEST is HOGE!\n"); } //main.c #include "sub.h" #include <stdio.h> int main(void) { print(); return 0; } //sub.h extern int TEST; です。 どちらかでも回答できるかたがいらっしゃれば、お願いします。 なぜかうごきません #include<stdio.h> #include<math.h> int main() { double x; printf("%10s%10s%10s%15s%20s\n","x","log(x)","sqrt(x)","exp(x)","pow(10.0,x)"); for(x=1.0;x<10.0;x++) printf("%10.5f%10.5f%10.5f%15.5f%20.5f\n",x,log(x),sqrt(x),exp(x),pow(10.0,x)); return 0; } がどうしてもうごきません。 log,sqrt,exp,powが認識されないようです。定数なら大丈夫ですが、for文で変数を走らせると駄目になります。なぜでしょうか? C言語で直角三角形の斜辺を求めるプログラムについて 「二辺の長さが与えられているとき、斜辺の長さを求めよ」という問題です。 #include <stdio.h> #include <math.h> #define a 3 #define b 4 int main (void) { double c=0; c=sqrt(a*a+b*b); printf("%f",c); return 0; } visual2010c++で作ったんですが、sqrtに下線がついて、コンパイルエラーしちゃいます。 すんごい初歩的なことなんだと思いますが、どこなのか気づけません。 どなたかよろしくお願いします。 32ビットのプログラミングで・・・"undefined reference to __main"ってなに? gccを使って32ビットのプログラムをしています。 main.cとsu.asmでできたプログラムをくっつけてます su.asmはスタートアップルーチンでそっからmain.cの 中のmain()を呼び出してます。すると・・・ C:\JO>make gcc -fno-builtin -nostdlib -ffreestanding -nostartfiles -nodefaultlibs -march=i486 -c main.c nasm -f win32 su.asm -o su.o -l su.lst ld -o os.obj -Map mapfile.txt -T ld.scr su.o main.o main.o(.text+0x21):main.c: undefined reference to `_alloca' main.o(.text+0x26):main.c: undefined reference to `__main' make: *** [os.obj] Error 1 c言語 コンパイルエラー 以下webページに載っているC言語のプログラムをコンパイルした時に ”/tmp/cchzThVk.o: In function 'c_to_sh': 5.c:(.text+0x5b3): undefined reference to 'sqrt' 5.c:(.text+0x64e): undefined reference to 'atan2' collect2: Id は ステータス1で終了しました。” とメッセージが出るのですが、このメッセージが出たときはプログラムにミスがあるということなのでしょうか。教えてくださいお願いします。 http://plaza.rakuten.co.jp/dragonkkk cygwinのgccが、エラーになってしまいます。 テストプログラム $ cat test.c #include <stdio.h> int main (void) { printf("Hello, World!\n"); return 0; } これを、コンパイルすると $ gcc test.c gcc: error trying to exec '/usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe': execv: Bad address /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xba): undefined reference to `_WinMain@16' collect2: ld はステータス 1 で終了しました と、このようなエラーが出てきました。 ファイルを確認しても、何も作られていません。 $ ls test.c 対処方法を、ご教示願います。 2次方程式の解 Cプログラミング C言語でのプログラムの添削をお願いします。 2次方程式の解を求めるものなのですが。 #include<stdio.h> #include<math.h> main(){ double a,b,c,d; double x1=0; double x2=0; scanf("%lf %lf %lf" ,&a,&b,&c); printf("a=%f b=%f c=%f\n" ,a,b,c); d=b*b-4*a*c; if(d>0){ x1=(-b+sqrt(d))/2*a; x2=(-b-sqrt(d))/2*a; printf("x=%f,%f\n" ,x1,x2); }else if(d<0){ x1=-b/2*a; x2=sqrt(-d)/2*a; printf("x=%f+%fi,%f-%fi\n" ,x1,x2,x1,x2); }else{ printf("x=%f\n" ,x1); } return 0; } このとき、 a=-7,b=2,c=-1 を与えると x=7.000000+-17.146428i,7.000000--17.146428i という値が返ってきます。 他にも、虚数解のときに間違った値が返ってきてしまう気がするのですが、いかがでしょうか? 実数解のときは正しいようです。 回答よろしくお願いします。 ポインタの問題おしえて 2つの数値を交換する問題です。 #include<stdio.h> void swap(float *na , float *nb){ float temp= *na; *na = *nb ; *nb = temp; } float main( ){ float a,b; puts("2つの実数の入力"); prinf("a="); scanf("% f ",&a); prinf("b="); scanf("% f ",&b); swap(&a , &b); printf("a= %5.5f b= %5.5f", a, b) ; } これを実行すると kadai3.c: In function `main': kadai3.c:11: warning: return type of `main' is not `int' /tmp/cc0BwKGT.o(.text+0x78):kadai3.c: undefined reference to `prinf' /tmp/cc0BwKGT.o(.text+0x9c):kadai3.c: undefined reference to `prinf' collect2: ld returned 1 exit status こんなエラーが出ました。 いろいろ直しましたがどうして実行されません。 誰かわかる人がいたら間違いを見つけて教えてください お願いします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
おお! うまくいきました。有難うございました。