• ベストアンサー

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

shuyamakawaの回答

回答No.1

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

onken
質問者

お礼

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

関連するQ&A

  • Windowsコモンコントロールのcygwin/gccコンパイルエラー

    以下のサイトのようなWindowsコモンコントロールのプログラムをcygwin/gccコンパイルするとエラーがでます。 (sourceのサイト) http://wisdom.sakura.ne.jp/system/winapi/common/common16.html (ビルドコマンド) gcc -mwindows -mno-cygwin -o main.exe main.cpp (エラー出力) undefined reference to `_ImageList_Destroy@4' undefined reference to `_InitCommonControls@0' undefined reference to `_ImageList_Create@20' undefined reference to `_ImageList_ReplaceIcon@12' undefined reference to `_ImageList_ReplaceIcon@12' collect2: ld returned 1 exit status make: *** [main.exe] Error 1 Windowsコモンコントロールを含んだプログラムをcygwin/gccコンパイルするにはどうすればよいでしょうか? コンパイルは出来ないのでしょうか? よろしくお願いします。

  • cygwinのgccが、エラーになってしまいます。

    テストプログラム $ cat test.c #include <stdio.h> int main (void) { printf("Hello, World!\n"); return 0; } これを、コンパイルすると $ gcc test.c gcc: error trying to exec '/usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe': execv: Bad address /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xba): undefined reference to `_WinMain@16' collect2: ld はステータス 1 で終了しました と、このようなエラーが出てきました。 ファイルを確認しても、何も作られていません。 $ ls test.c 対処方法を、ご教示願います。

  • h8300-linux-elf-gccで指定可能な配列の大きさ

    AKI-H8/3069Fを使ってプログラムのC言語による組込ソフトの勉強をしています。そこで、教えていただきたいのですが、配列の大きさの上限値はいくつなのでしょうか? 例えば、unsigned int char a[1025];としてもコンパイル時にエラーが出なければ大丈夫なのでしょうか? 参考にしているのは、書籍『はじめる組込みLinux』です。そして、そのサポートサイトからダウンロードしたGCCコンパイラ(h8300-linux-elf-gcc)を使用しています。

  • エクセル割り算

    エクセル2002です。関数割り算で分母のセルが変わってしまいます。 例: 関数設定 分子:C2 分母:B2 関数C2/B2をC3に設定 WINNDOWS再起動しファイル開くとC3の関数の分母だけが変わる。(C2/A2) A2は以前分母に関数設定したことあります。 エクセル壊れたのでしょうか?

  • なにやら文字式の割り算

    なにやら文字式の割り算 すいません。またまた困ってます。 やり方からまったくわかりません。 aは定数とする。以下において、割り算はxについての整式とみて行うものとする。 (1)A,Bはxについての整式とし、Aをx^2-aで割るとあまりがx+1、   Bをx^2-aで割るとあまりがxであるとする。ABをx^2-aで割ったときのあまりを求めよ。 (2)x^150をx-aで割ったときのあまりを求めよ。 (3)x^151をx^5-aで割ったときのあまりを求めよ。 どなたかよろしくお願いします。

  • cygwin gcc c99 での isnormal と strtold の使用

    Cygwinのgccで-std=c99オプションを付けて 以下のコードをコンパイルしようとしています。 #include <stdlib.h> #include <math.h> int main() { isnormal(0.123); strtold("0.123", NULL); return 0 ; } $> gcc -std=c99 test_strtold.c ですが、コンパイルできず、2つの関数とも'undefined reference'になります。 -std=c99を付けてコンパイルする方法または この記述と同等の別の記述がありましたらご教授願います。 よろしくお願いいたします。

  • 掛け算と割り算の順番

    社会人ですが、SPIの試験で久しぶりに計算に取り組んでいる中で、 掛け算と割り算の順番について、どうだったかな?と思うところがあったので、 教えてください。 <1>20×10÷2 (a)(20×10)÷2=200÷2=100 (b)20×(10÷2)=20×5=100 (a)でも(b)でも同じですよね。 <2>20÷10×2 (a)(20÷10)×2=2×2=4 (b)20÷(10×2)=20÷20=1 (b)が間違っているのは分かります。 上記のように、具体的な数字でしかも単純な数字なら、 わざわざ(b)のような間違いはしません。 たまたまaやx(エックス)といった変数が入り、かつ数字も面倒な数字だったため、 なぜか掛け算や割り算は順序を入れ替えても良いと思ってしまって、 (b)のような解き方をしてしまいました。 例えば、360a ÷60b ×6 こういう式があると心情的に60×6が360だから消せる! と思ってしまったり(すいません、実際に疑問に思うきっかけになった式を忘れました)。 <2>で÷10を×1/10に直せば、間違えようがない、ということなのでしょうが、 学生時代、こんなこと疑問に思ったことがないということは、 基本的なルールをド忘れしているのかなと思いますので、 僕が<2>の(b)について、どんなルールを忘れたために間違ってしまったのか、 教えていただけませんでしょうか? 実際には変数が入ってきたり、小数やら分数が混じるからこそ、 左から右ではなく、効率的にできるところはしたいなという考えが起きてしまいます。

  • gcc使用時のエラー

    現在openCVで画像処理プログラミングを行おうとしております。 一通りコーディングが終わった所でgccを使用してコンパイルをかけた所、 下記のようなエラーが出ました。 (コード中でhighgui.h及びcv.hをインクルードしています。) /tmp/cch6hMvI.o: In function `cvDecRefData': test.c:(.text+0xaa6): undefined reference to `cvFree_' test.c:(.text+0xb2e): undefined reference to `cvFree_' これはライブラリへのパスが通っていないものと思い、端末から export LD_LIBRARY_PATH=/usr/local/lib/ としましたが、それでもエラーが出ます。さらに下記も試してみましたが同様です。 gcc -L/usr/local/lib -o test test.c (/usr/local/lib/以下にlibopencv_core.so.2.4等が置いてあります。) pkg-configを使用すればコンパイルは通るのですが、 何がどうなってエラーになっているのかイマイチ分からず気持ちが悪いです。 1、上記エラーは共有ライブラリへのパスが通っていないために起きているものですか? 2、そうだとすれば、-Lやexport LD_LIBRARY_PATHで解決出来ないのは何故でしょう? 上記だけで情報が不足している場合は提示致しますので、 どうぞよろしくお願い致します。

  • MinGW-gccでの実行ファイル作成法

    今まで、visual studio 2008を使用して、実行ファイルを作っていたのですが、 今回、gccで実行ファイルを作らなければいけなくなりました。 どなたかどういったコマンドオプションを用いれば実行ファイル作成までたどりつくのか 知っている方がいれば教えていただきたいです。 ちなみに、現在 >g++ -o p -O3 -lm ./src/p.cpp ./src/m.cpp -L ./ -lica とコマンドを打っていますが : undefined reference to `_imp___Z13icaPdiiS_b'  とリンクが上手くいっていない感じのエラーが返ってきます。 このエラーの改善方法についてもぜひどなたかご教授ください。 お願いします。

  • sendmailのコンパイルエラーについて

    教えてください。>_< お願いします。 sendmail-8.12.2のインストールを試みたのですが、 エラーが返ってきます。 このエラーの意味、対処法などご存知の方 教えてください。 <エラー内容> domain.o: In function `getmxrr': domain.o(.text+0x25f): undefined reference to `__res_query' domain.o(.text+0x266): undefined reference to `__res_search' domain.o(.text+0x39b): undefined reference to `__dn_skipname' domain.o(.text+0x496): undefined reference to `__dn_expand' domain.o(.text+0x603): undefined reference to `__dn_expand' domain.o: In function `dns_getcanonname': domain.o(.text+0xf0c): undefined reference to `__res_querydomain' domain.o(.text+0x100f): undefined reference to `__dn_skipname' domain.o(.text+0x123f): undefined reference to `__dn_expand' domain.o(.text+0x128a): undefined reference to `__dn_expand' sm_resolve.o: In function `parse_dns_reply': sm_resolve.o(.text+0x17e): undefined reference to `__dn_expand' sm_resolve.o(.text+0x1fe): undefined reference to `__dn_expand' sm_resolve.o(.text+0x2e5): undefined reference to `__dn_expand' sm_resolve.o(.text+0x337): more undefined references to `__dn_expand' follow sm_resolve.o: In function `dns_lookup_int': sm_resolve.o(.text+0x612): undefined reference to `__res_search' collect2: ld returned 1 exit status make: *** [sendmail] エラー1 gccはバージョン2.96-81です。 OSはRedhatLinux7.1Jです。 よろしくお願いします。m(_)m