• 締切済み

-converオプション big_endian

ifcコンパイラのバージョン7.0を使用して、既存の数値モデルをMakefileでコンパイルする際に、Makefile中の-convertオプションというところがデフォルトの"big_endian"ではコンパイル自体ができないため、アンダーバーをとって"big endian"と変えたのですが、今度はバイナリファイルを読み込む際にエラーが出ているようなのですが、よくわかりません。この変更自体には問題はないのでしょうか。どなたか詳しい方よろしくお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

big_endian のときに「コンパイル自体ができない」と判断した理由は何でしょうか? 何かメッセージは出力されていませんか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++ コンパイルオプションについて

    C++標準出力に用いるcoutをコンパイルオプションで 入り切りしたい場合、Makefileにはどのように記述したらいいのでしょうか?また、ソース自体も何か記述する必要はありますか? よろしくお願い致します。

  • Fortranの割り算について

    フォートランによる数値計算についてお尋ねします。(技術系では今でもフォートランが現役なので) 何百万回も割り算をするアルゴリズムがあります。分母は定数で、分子がいっぱい変化します。としますと、割り算ではなく、分の1を計算して掛け算にしてもよいわけです。精度よりも高速化のほうが今はウェイトが高い状況です。 プログラムとしてそのように組んだ方が速いかも、と思いますが、一方でコンパイラが気を利かせて掛け算としてコンパイルしているかも知れません。もし、そうならばプログラムを書き換える意味がありません。 このあたりがコンパイラオプションなのかな?と思いますが、デフォルトでどのように計算しているか不明なのです。 以前の数値計算の本(PC-9801の頃)では時間を計って”ほら、割り算より掛け算が早いでしょ”ということを示すものなどがありました。そのような場合はコンパイラがそこまで気を利かせていないということになりますが、だいたいのところコンパイラは割り算をできるだけ掛け算に変更しようとしているのでしょうか。 PC上でのフォートラン(コンパックフォートランです。Microsoft,DECとオーナが変わってきてついに終わってしまったPC用のあのフォートランです。)を使っています。藁をも掴む思いで高速化を進めています。いかがでしょうか。

  • 数値計算で生じる小さなごみ

    ある問題を数値的に解こうと思いFortranでプログラムを組んでいるのですが、倍精度の数値計算で以下のような事が起きて困っています。 プログラムの中で A=B-C*D (変数は全て倍精度実数変数) のような代入文があるのですが、 write(*,*) B,C,D とすると、0.250000000000000 0.500000000000000 0.500000000000000 と表示されるのですが、 write(*,*) B-C*D や write(*,*)A では-1.79570984817912D-017 などと表示されます。(この数値に意味はないのでしょうが、同じシチュエーションでは常に同じ値が表示されます) 入力した値の精度外の「誤差」ですが、どこに原因のある問題でしょうか? 因に使っているコンパイラはintelのサイトで入手したフリーの評価版ifc ver.6 でそれにpentium4に最適化するオプションをつけてコンパイルしています

  • エクセルに入力した数値を出力するには

     エクセルに入力された数字(データベース)をC言語のプログラムで読み取り、それをコンパイルして出力したいのですが、エクセルの数値がうまく出力されず 空白になってしまいます。プログラム自体にはエラー、警告等がないので、問題はないとは思いますが...エクセルの方の設定がうまくいってないのでしょうか?ご教授お願いします。 ちなみに、コンパイラはボーランドのフリーコンパイラで、OSはWinXPです。

  • ファイルが存在しない?

    数値計算用のソフトとしてコンパイラーにsalfordのFORTRAN77、エディタにCpad for Salford FTN77を使用しております。 使用しているPCのOSはwindows XP HOME Edition service pack 2で、メモリは2GBです。 最近、ソースコードにおかしな箇所がないにもかかわらず、コンパイルをしようとすると「コンパイルに失敗しました」と表示され、計算ができないことがあります。 その際、「指定されたFORファイルは存在しません」とも表示されます。 ですが、FORファイル自体はまぎれもなく確かにPC内に存在するものです。 FORファイル名を間違って入力するなどはしておりません。 ちなみに、FORファイル名には半角英語や数字を用い、漢字などは使用しておりません。 また、ファイル名も、たとえば「new4」などのような短いものにしています。 故障かとも思い、コンパイラとエディタを両方とも再インストールしたこともありますが、改善されませんでした。 PC内にあるほとんどのFORファイルは問題なくコンパイルできます。 「コンパイルに失敗しました」と表示されるのは、ある特定のFORファイルをコンパイルしようとした時のみです。 この、「ある特定のFORファイル」は正常にコンパイルできるFORファイルのソースコード中の数値を少し変更したものです。 したがって、記述方式自体に問題があるとは思えません。 原因がまったくわからず、本当に困っています。

  • cygwinで-mno-cygwinオプションの有無によって動作の変わる原因について

    こんにちは、shigre2005と申します。 私は普段UNIX上でC言語のプログラムを書いているのですが、わけあってWindows上で動くようにする必要が出てきました。そのプログラムをそのままcygwinでコンパイルしたところコンパイルでき、実行ファイルも問題なく実行できたのですが、このままですとcygwin1.dllが必要になってしまいます。 上記のような質問を前回した際に、gccに-mno-cygwinオプションをつければよいと教えていただき、そのときはうまく行ったのですが、今回はなぜかうまく行きません。オプションをつけないときは普通に実行できるのですが、つけると、リンクの段階で以下のようなエラーが出てしまいます。 /usr/lib/gcc-lib/i686-pc-mingw32/3.3.3/../../../../i686-pc-mingw32/bin/ld: crtbe gin.o: No such file: No such file or directory make: *** [all] Error 1 makefileを使っていて、GTKを使用しています。-mno-cygwin以外のコンパイルオプションは以下のものをつけています。 (.c→.o) -Wall -DGTK_DISABLE_DEPRECATED -mms-bitfields `/usr/bin/pkg-config --cflags gtk+-win32-2.0` (.o→.exe) -Wl,--subsystem,windows `/usr/bin/pkg-config --libs gtk+-win32-2.0` -mno-cygwinは(.o→.exe)の方につけています。 gccのバージョンは、4ではうまく動かなかったので、3.3.3を使っています。 どうぞよろしくお願いします。

  • 移植性の高いmakefileの作成

    移植性の高いmakefileの作成 C言語で書かれたソースファイルをmakeツールでビルドしています。 もともとコンパイラとして「Borland C++ Compiler 5.5.1」を使用し、Borland C++ 同ツール付属のmakeツール「MAKE Version 5.2」を使用していました。 makeの基本文法は理解しており、Borlandのコンパイラを使用している間は特に問題ありませんでした。 しかし最近、新たにGCC系列のMinGWという開発環境一式と、補助ツールMSYSを導入し、既存のmakefileをGCCおよびGNUmakeに対応させることにしました。 具体的には、 GMAKEを起動した場合はgccでコンパイルする。 Borland make を起動した場合にはbcc32でコンパイルする。 という切り替えを同一のmakefileで行おうと考えました。 しかし、ここで問題が発生しました。 makeの依存関係部分はborland付属make(以下Bmakeとします)とGNUmakeであまり違いはないのですが、単一のmakefileで対応しようとすると、どうしてもコンパイラオプションやコンパイルコマンドを切り替える部分が必要です。しかし、ifdefやincludeディレクティブに関してはお互いにまったく互換性がなく、片方のmakeで有効なフラグをつかってifdefで分岐しようとしても、もう片方では完全に文法エラーです。 例えば、ifdefやincludeディレクティブは、Bmakeでは先頭に!が必要ですが、GNUmakeには必要ありません。 以下の書籍でポータブルなmakefileの記述に関していろいろ調べたのですが、Bmakeの特殊な文法についての言及がなく、対応策が見つかりません。 様々な環境でビルドされるFireFox3.0のソースコードも参考にしようとmakefileと思われるファイルを全て検索したところ、1769個ほど見つかりました。 その中で!ifdefディレクティブを使用しているのは極わずかで、Makefile.winという名称のものがいくつかあっただけでした。 しかもそれらは最後の方にincludeディレクティブも使っていました。 例えば、MozillaFirefox3.0のソースコードにあるmakefaileの内、firefox-3.0-source.tar\mozilla\dbm\src\Makefile.winは「include <$(DEPTH)/config/rules.mak>等」、という一文がある一方、その他のifなどのディレクティブは頭に!をつけられており、全体としてはBmake(多分ターゲットはMSVC++だと思いますが。)です。 これはBmakeではエラーになるはずなのですが、動作機構は不明です。 また、条件付マクロというテクニックで、ある値が定義されていれば左値を、定義されてなければ右値を使ってマクロ置換するテクニックがあったので、これでディレクティブをマクロ置換してやろうと考えました。しかし、ディレクティブをマクロ定義することはできないようでこれも失敗しています。 #INCLUDE というマクロを定義して、 INCLUDE = $(_GNUMAKE_?include:!include) #マクロをディレクティブ命令として使う $(INCLUDE) testmake.mk それぞれのmake専用makefileを作るのは簡単ですが、新しいプログラムを追加するたびに複数のmakefileを書き直すのは避けたいのです。 長々と書きましたが、解決策として次の2つのいずれかのようなものがあれば教えていただきたいです。 1. ifやincludeディレクティブに代わる、GNUmakeとBmake両方に使えるテクニック。 2. 起動したmakeによって条件分岐、もしくは読み込むファイルを切り替えるテクニック。 よろしくお願いいたします。 開発環境 OS: winXP コンパイラ: 「Borland C++ Builder 6.0」「Borland C++ Compiler 5.5.1」「gcc version 3.4.5 (mingw special)」 make: 「MAKE Version 5.2 (C++ BuilderとC++ Compiler 5.5.1はおなじmakeを使用している模様)」「GNU Make version 3.79.1」 参考文献 1. 「GNU Make 第3版」オライリージャパン、2005年 2. 「C言語逆引き大辞典」秀和システム、2003年 3. 「GNUソフトウェアプログラミング」、?年

  • Fortranのバージョンアップと古いソースコード

    Fortranは科学技術計算の古い資産が使えるということでまだ使われていると思います。 しかも、コンパイラ・リンカは製品としてバージョンアップしているわけですが、新しくなっても古いコードはコンパイル・リンク・実行できると思っていました。最近、intel fortranの更新をしたのですが、動作がかなり違ってきました。F77,F90,F95などの更新ではなく、intel社の製品としての最新版への更新です。コンパイル・リンクまでは行くのですが、実行させたとたん、ゼロ割のようなメッセージが出て、実行が打ち切られてしまいます。1時間ぐらい走るプログラムなのですが、1秒で打ち切りでした。必ずそうなるということではありません。特定のライブラリで生じます。そのライブラリは古い(言語としてはF77)ので当然ながら新しいコンパイラで動くなどと書いていません。ただソースコードの塊であり、古いコンパイラでは動いていたのです。古いと行っても2009年ぐらいに買ったintel visual fortran ver.11ぐらいのもので2016年のコンパイラと大幅な変更はないはずなのですが。例えば最新版(2016年2月時点)の方は並列関係の設定の方がデフォルトで並列計算しない設定をコンパイラオプションで指定しないとおかしくなるということでしょうか(たぶんGPUには対応していないと思いますが)。どっかに書いてあるかなと思案していますが。 何か心当たりがあればよろしくお願いします。

  • VisualStudio.netでmemcmp関数が使えない?

    以前VC++6.0で作ったプログラムをVisualStudio.net_pro_ver2003でコンパイルしようと思っています。 VC++の空プロジェクトを作り、既存項目の追加で以前作成したソースファイルを挿入し、 それをコンパイルしました。 すると、初めにmemcmp関数が「'/clr'オプションを持つCコンパイラで完全なプロトタイプ関数が必要です」と表示され、 memcmpのある全ての行に対し、「関数へのポインタを通して実行される呼び出しに対する引数が多過ぎます」いうエラーが出てしまいます。 strings.hもインクルードしておりますし、VC++では問題なくコンパイルが通っていたので原因が良く分かりません。 そもそもVC時代から良く分からずに使っていたので基本が出来ていないようですが、 宜しく御願い致します。

  • C言語でのコンパイラの作成方法

    C言語初心者のため、稚拙な文章になる可能性があることを最初にお詫びします。 現在Microsoft社のMicrosoft Visual C++ 6.0を用いてCドライブのルートにある「temp.c」というソースファイルをコンパイルするアプリケーションを作ろうと思っているのですが、ネット上で「C言語 コンパイラ 作成」等と検索しても、既にコンパイラがあることを前提としたホームページしか見つけることができず、肝心のコンパイラをどのように作ったらよいのかということが載ったホームページが見つかりません。 というわけで、今回はコンパイラをどのように作ったらよいのかというヒントだけでもいいので教えて頂けないかと思い投稿させて頂きました。 ちなみに「temp.c」はそこまで複雑なソースではなく、DOS上のアプリで、リソースやアイコンなどは用いないものです。 そもそも「コンパイラを作る」ということ自体が愚かな行為なのかと思ったりもします。 私が所持しているBcpadやMicrosoft Visual C++ 6.0に付属している既存のコンパイラを利用するということも考えたのですが、BcpadやMicrosoft Visual C++ 6.0の本体以外からコンパイラをどのように利用していいのかもわかりません。 どうぞ忌憚の無い意見をよろしくお願いします。 ちなみにOSはXPのSP3です。