ilink32について。'__setargv__'と'__turboFloat__'が未解決

このQ&Aのポイント
  • WindowsXP+bcc32+ilink32でGLUTを使ったプログラムを書いています。コンパイル後のリンクで'__setargv__'と'__turboFloat__'が未解決のエラーが出ています。
  • 問題はbcc32の設定やMakefileではなく、リンク時のエラーです。解決方法を教えていただけると助かります。
  • ハッシュタグ: #ilink32 #bcc32 #GLUT #リンクエラー #解決方法
回答を見る
  • ベストアンサー

ilink32について。'__setargv__'と'__turboFloat__'が未解決

WindowsXP+bcc32+ilink32でGLUTを使ったプログラムを書いています。 bccの設定はsetbcc.exe(http://www.cmagazine.jp/setbcc.html)を使いました。 opengl32.lib, glu32.lib, glut32.libはimplib.exe(http://blog.jyoken.net/?eid=478291)を使って作成しました。 以上の設定でbcc32付属のMakeを使ってmakeしたところ、 コンパイル後のリンクで以下のようなエラーが出てしまい困っています。 どなたか解決法を教えていただけないでしょうか? よろしくお願いします。 --------------------- エラーの内容 --------------------- Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '__setargv__' が未解決(root が参照) Error: 外部シンボル '__turboFloat' が未解決(root が参照) --------------------- --------------------- 使用しているMakefile --------------------- CC = bcc32 LINKER = ilink32 SRCS = main.c callback.c Task.c Logger.c OBJS = $(SRCS:.c=.obj) TARGET = main.exe CFLAGS = -wall -O2 LFLAGS = LIBS = opengl32.lib glu32.lib glut32.lib INCLUDE = -I"C:\borland\bcc55\Include" LIB = -L"C:\borland\bcc55\Lib" all: $(TARGET) .SUFFIXES : .obj .c .c.obj: $(CC) $(CFLAGS) -c $(SRCS) $(TARGET): $(OBJS) $(LINKER) $(LFLAGS) $(LIB) $(OBJS),$(TARGET),,$(LIBS) ---------------------

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

BorlandのCコンパイラは、スタートアップルーチンを含むオブジェクトファイルは ライブラリファイルの中にはアーカイブされていなくて、適切な スタートアップ用.objファイルを別途指定してリンクしていたと思います #bcc32.exeを使った場合はコンパイラドライバが自動でやってくれる。 質問にあるMakefileの内容を見た感じでは、そのOBJファイルを指定していませんので、 それが原因で解決できないシンボル名がでているのだと思います。 ということで、ilink32.exeでリンクする対象にそのスタートアップ用OBJファイルを 含めてやればよろしいかと。 C0なんとか.OBJという名前で、コンパイルオプションに応じていくつか 存在していたと思います。 #置かれている場所はライブラリファイルのあるディレクトリです。

yu-ta19
質問者

お礼

無事解決しました。 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) ------------------------

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

提示された情報からわかるのは、 main.c, callback.c, Task.c, Logger.cのいずれかにあるであろう root関数が呼び出している setargv__関数とturboFloat関数の2つのオブジェクトコードが 見つからなかった、ということです。 外部シンボルを解決する際、関数名の大文字と小文字は別のものとして扱います。 解決できなかった2つの関数のソースコードをご自分で書かれたのでしたら、 関数本体と呼び出し側とで名前が食い違っていないかどうか、 まずは確認してみてください。

yu-ta19
質問者

お礼

私の説明不足でした・・・。申し訳ありません。 「BCCのコア(と思われる)部分に必要な何かが足りないと思うのだけど、何が足りないのか分からない」というのが問題の根本でした。 質問文の書き方については以後気を付けるようにします。

関連するQ&A

  • win版インテルコンパイラnmakeについて

    linux版インテルコンパイラ(icc)を使っているmakefileをwindows版インテルコンパイラ(icl)で使えるように書きかえているのですが、コマンドプロンプトでどうもnmakeがうまくいきません。 元のmakefileは、 CC = icc CFLAGS = -O3 -xSSE4.2 CFLAGS2 = $(CFLAGS) -openmp -openmp-report1 LIBS = -lm -liomp5 PROGRAM = foo.exe SRCS = foo1.c foo2.c foo3.c .c.o: $(CC) $(CFLAGS) -c $< .SUFFIXES: .c .o all : $(PROGRAM) $(PROGRAM) : ${OBJS} $(CC) $(CFLAGS) -o $@ ${OBJS} $(LIBS) foo1.o : foo1.c foo.h foo2.o : foo2.c foo.h $(CC) $(CFLAGS2) -c $< foo3.o : foo3.c foo.h clean: rm *.o rm $(PROGRAM) で、書き換えたmakefileは、 CC = icl CFLAGS = -O3 -QxSSE4.2 CFLAGS2 = $(CFLAGS) -Qopenmp # CFLAGS = -W -O3 LIBS = -lm -liomp5 PROGRAM = foo.exe SRCS = foo1.c foo2.c foo3.c .c.o: $(CC) $(CFLAGS) -c $< .SUFFIXES: .c .o all : $(PROGRAM) $(PROGRAM) : ${OBJS} $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS) foo1.o : foo1.c foo.h foo2.o : foo2.c foo.h $(CC) $(CFLAGS2) -c $< foo3.o : foo3.c foo.h clean: rm *.o rm $(PROGRAM) です。(投稿の際に見づらかったためスペースや改行はいじってます) CFLAGS2の-openmpを-Qopenmpにしたのと $(PROGRAM)の行の${OBJS}を$(OBJS)にしたぐらいですがエラーが発生します。({}括弧を使っているとエラーが発生したため) エラーメッセージは NMAKE : warning U4006: 特殊マクロは定義されていません : '$<' です。 {}の括弧を()に修正したのも似たエラーが発生したからなのですが、 コマンドプロンプトだと特殊マクロは使えないのでしょうか?

  • bcc55のエラー(cox32.obj)

    コンパイルすると、いつも Fatal:ファイルCOX32.OBJが開けません と言うエラーが出てしまいます。 bcc55のbinフォルダーにbcc32.cfgというファイルを作り、中身に -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" ilink32.cfgには -L"c:\Borland\Bcc55\lib" となっています。 初歩的なことかもしれませんがよろしくお願いします。

  • BCCでコンパイルする際に静的リンク指定が無視される

    GLUTを使用したCプログラムをBCCでコンパイルしたのですが、実行ファイルが生成されてもライブラリが静的リンクされません。 コンパイルオプションとして、 > bcc32 *.c glut32.lib glu32.lib winmm.lib とlibファイル名のリストを与えているのですが…… 当然ながら、bcc32.cfgとilink32.cfgの環境変数でlibファイルへのパスは与えてあります。

  • OPEN GL

    OPEN GLをWindows上でプログラムし実行したいのですが、 エラーが出ます。 パスは通っているはずですし、 プログラムも間違っていないと思います。 使用言語はC言語で、C言語を始めようというソフトを 使用しています。 出てくる文章は以下の通りです。 cmd.exe /C bcc32.exe -C m.c *** コンパイル開始 *** Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland m.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 'C:\BORLAND\BCC55\LIB\GLUT32.LIB' contains invalid OMF record, type 0x21 (possibly COFF) *** コンパイル終了 *** プログラム内容 http://mailsrv.nara-edu.ac.jp/~asait/open_gl/prog2_glut.htm ちなみにglut.hなどは通っているはず・・・ 本当に素人で右も左も分からない状態ですが、 教えてください。

  • BCC5.5のMakeFileについて教えてください。

    小生、只今、WinXPSP3上でC言語を使い、BCC5.5.1でコンパイルしながらプログラミングを勉強しています。 今回質問させて頂きたいのがBCCのMakeFileについてです。 http://blog.tomnekosoft.com/tomnekosoft.php?itemid=645 上記のサイトから、BCCのMakeFileというものを始めて知り、 その内容を理解したいと思いました。 以下にそのMakeFileを記述させて頂きます。 # # make -f fb_sample.mak # # ここの箇所は理解できました。 CFLAGS = -c -w- -a4 -DWIN32 -tWC -IC:\bin\bcc55\include LFLAGS = /m /s /Tpe -LC:\bin\bcc55\Lib LIBS = fbclient_bor.lib CC = bcc32 LINK = ilink32 # この.SUFFIXESというのがわかりません。 .SUFFIXES: .c .obj .c.obj: $(CC) $(CFLAGS) $< # この下も一切わかりません。 fb_sample.exe: fb_sample.obj @echo c0x32.obj+ > link.arg @echo $? >> link.arg @echo $@ >> link.arg @echo $(LFLAGS) >> link.arg @echo $(LIBS)+ >> link.arg @echo import32.lib+ >> link.arg @echo cw32.lib >> link.arg $(LINK) @link.arg 以上です。 分からない場所は、.SUFFIXESとfd_sample.exeから始まる箇所です。 お忙しい中、申し訳ございませんが、先輩方ご教授宜しくお願い致します。

  • Windowsアプリケーションが作りたいのですが

    /* OS==XPpro コンパイラー==Borland C++5.5  */ #include <windows.h> で Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) となってexeファイルができません。 解決法を教えてください。 C言語歴2日

  • OpenGLに関する質問

    BCCでOpenGLのWEBのサンプルプログラムをコンパイルしようと思うのですが、 Error: 'C:\BORLAND\BCC55\LIB\GLUT32.LIB' contains invalid OMF record, type 0x21 (possibly COFF) というエラーが出てコンパイルできません。 解決方法を教えてください。

  • C言語 エラー bcc developer プログラミング

    僕はbcc developerを使ってCプログラミングをしてるんですがしてるんですが今日いきなり【Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照】というようなエラーが出てきました。 困ってます。だれか教えてください↓

  • Borland C++ Compiler

    学校のC言語の授業で使用するので、Borland C++ Compilerをインストールしました。 今までに作ったプログラムや、教科書に載っていたサンプルプログラムをコンパイルして軽い勉強をしていたのですが、コンパイルの際にエラーが出るようになりました。 コマンドプロンプトでbcc32と打つと、パラメータのリストのようなものが出てくるので、-nなど適当にパラメータをつけて実行したら以下のようなエラーが出るようになりました。 Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland test.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) objとtdsファイルは出力されるのですが、exeが出力されません。 どうやったらなおるか、教えてください。

  • BCCのbcc32.cfgファイルとilink32.cfgファイルの設定について

    この前もBCCのことで質問したものです。 BCC5.5を先日インストールしたのですが、PATH設定プログラムのところで疑問があります。 頼りにしているHPを見ながら設定してます。 それだとbcc32.cfgファイルの設定は -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib" となっているのですが、私の場合は -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" となっています。 同じくilink32.cfgファイルの設定も -L"c:\Borland\Bcc55\lib" となっているのですが、私のは -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" となっています。 これはこのまま設定してもいいのでしょうか? このままで設定して一度MS-DOSプロンプトで↓のHPの"hello, world" (http://homepage1.nifty.com/tyuuki/old/cc/image/bcc_use_4.png) を試してみたのですが、最後の"test"を入力すると「コマンドまたはファイル名が正しくありません」とでてしまいます。その前までは順調に進みます。 やっぱり設定が違うのでしょうか。 もしくは、MS-DOSプロンプトを起動すると、最初に「コマンドまたはファイル名が正しくありません」と出てしまうのが影響しているのでしょうか。 ちなみにWindows MEを使っています。 初心者の質問なので、長々とわかりにくく書いててすみません。 もし、わかる方がいらっしゃったら教えてください。 よろしくお願いします。

専門家に質問してみよう