- ベストアンサー
ilink32について。'__setargv__'と'__turboFloat__'が未解決
- WindowsXP+bcc32+ilink32でGLUTを使ったプログラムを書いています。コンパイル後のリンクで'__setargv__'と'__turboFloat__'が未解決のエラーが出ています。
- 問題はbcc32の設定やMakefileではなく、リンク時のエラーです。解決方法を教えていただけると助かります。
- ハッシュタグ: #ilink32 #bcc32 #GLUT #リンクエラー #解決方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
BorlandのCコンパイラは、スタートアップルーチンを含むオブジェクトファイルは ライブラリファイルの中にはアーカイブされていなくて、適切な スタートアップ用.objファイルを別途指定してリンクしていたと思います #bcc32.exeを使った場合はコンパイラドライバが自動でやってくれる。 質問にあるMakefileの内容を見た感じでは、そのOBJファイルを指定していませんので、 それが原因で解決できないシンボル名がでているのだと思います。 ということで、ilink32.exeでリンクする対象にそのスタートアップ用OBJファイルを 含めてやればよろしいかと。 C0なんとか.OBJという名前で、コンパイルオプションに応じていくつか 存在していたと思います。 #置かれている場所はライブラリファイルのあるディレクトリです。
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
提示された情報からわかるのは、 main.c, callback.c, Task.c, Logger.cのいずれかにあるであろう root関数が呼び出している setargv__関数とturboFloat関数の2つのオブジェクトコードが 見つからなかった、ということです。 外部シンボルを解決する際、関数名の大文字と小文字は別のものとして扱います。 解決できなかった2つの関数のソースコードをご自分で書かれたのでしたら、 関数本体と呼び出し側とで名前が食い違っていないかどうか、 まずは確認してみてください。
お礼
私の説明不足でした・・・。申し訳ありません。 「BCCのコア(と思われる)部分に必要な何かが足りないと思うのだけど、何が足りないのか分からない」というのが問題の根本でした。 質問文の書き方については以後気を付けるようにします。
お礼
無事解決しました。 sakusaker7さんの言う通り、スタートアップモジュールを指定していないことが原因でした。 普段はVCとgcc+Makefileを使っていてスタートアップモジュールのリンクを意識することが殆どありませんでした。 今後は気を付けようと思います・・・。 ありがとうございました。 ------------------------ Makefileに追加した部分 ------------------------ # スタートアップモジュール # http://dn.codegear.com/jp/print/33545 # c0w32.obj : 32bitコンソールアプリ用スタートアップOBJ # cw32.lib : シングルスレッド用ランタイムライブラリ # import32.lib: BCCコアAPIライブラリ STOBJS = c0x32.obj STLIBS = cw32.lib import32.lib ------------------------ ------------------------ Makefileの変更箇所 ------------------------ $(TARGET): $(OBJS) $(LINKER) $(LFLAGS) $(LIB) $(STOBJS) $(OBJS), $(TARGET), , $(STLIBS) $(LIBS) ------------------------