• ベストアンサー

外部シンボルが未解決

本に載っていたソースなんですが,外部シンボル 'drand48()' が未解決(C:\NYU.OBJ が参照)というエラーが出てなかなかコンパイルできません。drand48という関数はstdlib.hに含まれていると思うのですが,何故だか分かりません。どなたか分かる方,是非ともお力をお貸しください。 環境はbcc55です。元のソースはC++Builder4で作られたそうです。字数の関係ですべて載せることができませんが,よろしくお願いします! #include <stdio.h> #include <math.h> #include <string.h> #include <locale.h> #include <stdlib.h> #define Iunits 14 #define Hunits 200 #define Ounits 2 #define Rlow -0.30 #define Rhigh 0.30 #define A 1.4 #define B 0.3 #define fout(x) ( 1 / (1 + exp( -(x) ) )) #define urand() ( drand48() * (Rhigh - Rlow) + Rlow ) ~中略 void initialize()/*各ユニットに乱数で重みを振り当てる*/ { int i,j; for (i = 0; i < Hunits; i++){ for (j = 0; j < Iunits; j++){ wih[i][j] = urand(); } shikiih[i] = urand(); } for (i = 0; i < Ounits; i++){ for (j = 0; j < Hunits; j++){ who[i][j] = urand(); } shikiio[i] = urand(); } } ~少略

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

> なんとかwindowsでできないでしょうか? ↓これでいかがでしょ。 static long long x=0x1234ABCD330E; double drand48() /* 0.0以上1.0未満 */ { x = x*0x5DEECE66D + 0xB; return (x&0xFFFFFFFFFFFF)*(1.0/281474976710656.0); } long lrand48() /* 0以上2147483647以下 */ { x = x*0x5DEECE66D + 0xB; return(long)(x>>17)&0x7FFFFFFF; } long mrand48() /* -2147483648以上214748367以下 */ { x = x*0x5DEECE66D + 0xB; return(long)(x>>16)&0xFFFFFFFF; } void srand48(long s) { x = s; x = (x<<16)+0x330E; }

marsvolta
質問者

お礼

なんとかコンパイルできました。まだ問題が発生してexeファイルは実行できませんが,もう一度全体を見直してみます。ありがとうございました!

その他の回答 (2)

回答No.2

drand48はUNIX/Linux系の関数です。 どんなコンパイラ(ライブラリ)でも提供されるものではないでしょう。

marsvolta
質問者

お礼

回答ありがとうございます。UNIX/LINUX系ですか・・・。度々質問して申し訳ないのですががなんとかwindowsでできないでしょうか?

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

drand48?そんな関数名は無いと思ったけど… 標準の関数じゃないのは確かだね。スペルミスってことはないよね?

marsvolta
質問者

お礼

回答ありがとうございます。スペルミスということはないです。

関連するQ&A