• ベストアンサー

GCCでの割り算の方法を教えて下さい。

SH2の組み込みシステムのソフトをGCCにて開発しています。分母が変数の下記のような割り算のプログラムを作成した所LINKエラーが出て困っています。ちなみに分母が定数の時はOKです。どなたか初心者なので易しく解説して頂けないでしょうか?よろしくお願い致します。 ~ int a,b = 10; a=30/b; ~ エラー内容 undefined reference to '__sdivsi3'

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

  • ベストアンサー
  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.2

単にライブラリがないだけでしょ。 コンパイラのインストールがうまくいってないか、 環境設定がうまくいってないのだと思います。 定数の除算でエラーが出ないのは、 コンパイル時にライブラリではなく、 即値専用の割り算ルーチンに変換されるからです。

onken
質問者

お礼

早速の回答ありがとうございます。 ご指摘の通り、これまでSAMPLEのコンパイルバッチファイルをそのまま使っていたのですが、これに問題がありました。 コンパイルバッチファイルを調査した所、リンカオプションコマンドの中に標準ライブラリ参照が含まれていない事がわかりました。この参照を追加した所OKとなりました。初心者にはなかなか難しいです。 ありがとうございました。

その他の回答 (1)

回答No.1

SH2を使っていたのはかなり前で、資料も手元に残っていないんですが...。 SH2は命令長16bitの、最低限のCPU命令しか持っていません。 したがって、割り算などの(Cレベルでは)基本的な命令でも、ヘルパライブラリ関数を呼ぶような形にコンパイルするようになっています。(これはgccであればアセンブラのリスティングをすればわかると思います。) 組み込みシステムということで、提供されているライブラリを使っていないということだと思いますが、ご質問にあるようなプログラムのコンパイルをする場合は、 (1)提供されているライブラリから必要なヘルパ関数を抜き出し、サブセットのライブラリを作る。 (2)使用しているヘルパライブラリのサブセットの互換ライブラリを自作する。 (3)ヘルパ関数を使わないようにプログラム側を修正する。 などのなかから、現在の事情にあった方法を選択するという形になると思います。

onken
質問者

お礼

早速の回答ありがとうございます。 この回答をヒントに何故ライブラリ参照が行われていないのかを調査した所、SAMPLEのコンパイルバッチファイルのリンカオプションコマンドの中に標準ライブラリ参照が含まれていない事がわかりました。この参照を追加した所OKとなりました。初心者にはなかなか難しいです。 ありがとうございました。

関連するQ&A