電子書籍の厳選無料作品が豊富!

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)
---------------------

A 回答 (2件)

BorlandのCコンパイラは、スタートアップルーチンを含むオブジェクトファイルは


ライブラリファイルの中にはアーカイブされていなくて、適切な
スタートアップ用.objファイルを別途指定してリンクしていたと思います
#bcc32.exeを使った場合はコンパイラドライバが自動でやってくれる。

質問にあるMakefileの内容を見た感じでは、そのOBJファイルを指定していませんので、
それが原因で解決できないシンボル名がでているのだと思います。
ということで、ilink32.exeでリンクする対象にそのスタートアップ用OBJファイルを
含めてやればよろしいかと。

C0なんとか.OBJという名前で、コンパイルオプションに応じていくつか
存在していたと思います。
#置かれている場所はライブラリファイルのあるディレクトリです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/23 16:49

提示された情報からわかるのは、


main.c, callback.c, Task.c, Logger.cのいずれかにあるであろう
root関数が呼び出している
setargv__関数とturboFloat関数の2つのオブジェクトコードが
見つからなかった、ということです。

外部シンボルを解決する際、関数名の大文字と小文字は別のものとして扱います。

解決できなかった2つの関数のソースコードをご自分で書かれたのでしたら、
関数本体と呼び出し側とで名前が食い違っていないかどうか、
まずは確認してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/23 16:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!