【问题标题】:how to access library into the verifone vx520 terminal如何访问库到verifone vx520终端
【发布时间】:2015-07-07 11:08:46
【问题描述】:

我正在使用一些使用 Windows 操作系统和 nmake 的库。终端不接受这些库,当我尝试编译代码时出现错误。

我需要包含的库是

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

当我编译代码时,它显示错误

没有任何输入源文件“iso8583_defs_1993.h”

【问题讨论】:

  • 请提供更多信息:您在什么时候收到错误消息?错误是什么?这些头文件在哪里/它们来自哪里?您使用什么来构建程序(例如,您使用的是 nmake)?您越能告诉我们您的具体问题,我们就越有可能提供帮助。
  • 感谢您的更新。关于“......但终端不接受这些库并产生错误,即使代码也没有在 Windows 上编译。”所以你在编译时遇到错误,是吗?错误是什么?我的第一个猜测是你的 make 文件没有引用这些文件所在的目录,但是用这么少的信息是不可能的。
  • and please tell me the way to copy the whole code over stak overflow. 除非您的代码库非常短,否则本网站并非如此。相反,您应该只分享与您的问题直接相关的部分。要添加代码块,请将代码缩进 4 个空格。您可以复制和粘贴,然后使用{} 图标为您执行此操作。
  • 我对您的问题进行了一些实质性的修改,试图真正关注您的实际问题。如果您觉得我删除了一些重要的内容,请随时回滚这些编辑。此外,如果您单击edit,您可以看到格式化是如何完成的以实现对报价块的查找。您可以根据需要使用它来包含更多代码。
  • 你有没有想过这个问题?我很想知道我的回答是否对你有帮助。 @Manish T

标签: c verifone


【解决方案1】:

根据您的陈述

现在当我编译代码时,它显示错误 no any input source file "iso8583_defs_1993.h"

听起来你的 make 文件没有引用必要的目录。

让我们看看你的 make 文件。你将调用vrxcc 几次,每次你必须传递几个参数。让我们从调用它的地方开始编译(可能在 make 文件的底部)。让我从我的 make 文件中分享这样一行。 (注意:这通常都在一行中,但我已将其分解并添加了 c 样式 cmets (//) 来解释发生了什么。我意识到 // cmets 在 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 标志传递给编译器。例如,如果您尝试从 ACT 库中发送 #include "iso8583.h",那么您必须将 -I$(EVOACT)include 作为 $(Includes) 的一部分。如果你不这样做,那么你会得到一个错误,说它找不到你正在尝试使用的文件:

“错误:#5:无法打开源输入文件“iso8583_defs_1993.h”:没有这样的文件或目录”

我在上面的 cmets 中询问 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 只是指定输出文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多