1

Windows OS と nmake を使用していくつかのライブラリを使用しています。端末がこれらのライブラリを受け入れず、コードをコンパイルしようとするとエラーが発生します。

含める必要があるライブラリは次のとおりです。

#include "iso8583.h"
#include "iso8583_defs_1993.h"
#include "output.h" // for 'DL_OUTPUT_Hex'
#include "appl8583.h"

コードをコンパイルすると、エラーが表示されます

入力ソースファイル「iso8583_defs_1993.h」はありません

4

1 に答える 1

1

あなたの発言に基づいて

コードをコンパイルすると、入力ソースファイル「iso8583_defs_1993.h」がありませんというエラーが表示されます

あなたのmakeファイルが必要なディレクトリを参照していないように思えます。

あなたのmakeファイルを見てみましょう。数回呼び出しvrxcc、そのたびにいくつかの引数を渡す必要があります。コンパイルするために呼び出すところから始めましょう (おそらく make ファイルの一番下)。私のmakeファイルからそのような行を共有しましょう。(注: 通常、これはすべて 1 行で書かれていますが、何が起こっているのかを説明するために、分割して C スタイルのコメント (//) を追加しました。make//ファイルではコメントが機能しないことはわかっていますが、非常に読みやすいです。ここ)

-$(EVOSDK)\bin\vrxcc  // invokes the compiler
-c                    // compile only
$(COptions)           // my variable that passes compiler options 
$(Includes)           // my variable that passes all the directories to include
-o $(ObjDir)\$(ProjectName).o        // output the object file here
$(SrcDir)\$(ProjectName).c           // the input file (to compile)
-e"-" | "$(EVOTOOLS)fmterrorARM.exe" // where to send error output

(%evosdk%\..\Docs\DOC00303_Verix_eVo_Volume_III Operating_System Programming_Tools_Reference_Manual.docコンパイルとリンクの詳細については、を参照してください)

さて、そのコマンドの各部分には意味がありますが、この議論の目的のために、焦点を当てる必要があるのは$(Includes). 私にとってそれが何であるかをお見せしましょう:

Includes = -I$(AppIncludes) //Where AppIncludes  = .\include 
             $(SDKIncludes) //Where SDKIncludes  = -I$(EVOSDK)\include
             $(ACTIncludes) //Where ACTIncludes  = -I$(EVOACT)include
             $(VMACIncludes)//Where VMACIncludes = -I$(EVOVMAC)include
             $(VCSIncludes) //Where VCSIncludes  = -I$(EVOVCS)include

何かしたいときはいつでも、そのファイルが存在するディレクトリをフラグ#includeを使用してコンパイラに渡す必要があります。-Iたとえば#include "iso8583.h"、ACT ライブラリから取得しようとしている場合-I$(EVOACT)includeは、$(Includes). そうしないと、使用しようとしているファイルが見つからないというエラーが表示されます。

「エラー: #5: ソース入力ファイル "iso8583_defs_1993.h" を開けません: そのようなファイルまたはディレクトリはありません」

Where do these header files live/where did they come from?上記のコメントで質問した理由iso8583_defs_1993.hは、あなたが持ってきたカスタム ライブラリまたはコード ファイルであると想定しているからです。その場合は、そのファイルがどこにあっても、それが の一部であることを確認する必要があり$(Includes)ます。

すべてがコンパイルされたら、すべてをリンクする必要があります。(注:nmakeはファイルの変更を依存関係として使用するため、リンク部分はコンパイル部分よりもmakeファイルの上位に配置される可能性があります。)リンク行は1行しかなく、次のようになります。

$(EVOSDK)\bin\vrxcc $(COptions) $(AppObjects) $(Libs) -o $(OutDir)\$(ProjectName).out
  • $(COptions)コンパイラに渡したものと同じです
  • $(AppObjects)は私の変数です。いくつかの .c ファイルがあり、それぞれがオブジェクト ファイルにコンパイルされます。これは、これらの各.oファイルを表します
  • $(Libs)含めたい外部ライブラリ。Libs = $(ACTLibraries)\act2000.a私にとっては、カスタム ライブラリをインポートしようとしている場合 (ソース コードなしで、ソース コードがある場合は の一部になります) 、これは として定義されてAppObjectsいます。ここにそれらを追加する必要があります。ライブラリは ARM-11 プロセッサ用にコンパイルする必要があることに注意してください。そうしないと、動作しません。ソース コードがある場合は、AppObjects代わりにそれを追加することをお勧めします。
  • -o $(OutDir)\$(ProjectName).out出力ファイルを指定するだけです
于 2015-07-09T16:32:46.163 に答える