【问题标题】:Why am I getting an "unresolved external symbol" message?为什么我会收到“未解析的外部符号”消息?
【发布时间】:2013-11-20 22:47:40
【问题描述】:

我正在尝试使用 IBM 的 EHLLAPI 与他们的 Personal Communicator Terminal Emulator 进行交互。我已经从this page 复制了他们的示例代码,但是当我尝试构建它时它给了我一个错误。

1>------ Build started: Project: PCOMAPI, Configuration: Debug Win32 ------
1>  Source.cpp
1>Source.obj : error LNK2019: unresolved external symbol _hllapi@16 referenced in function _main
1>C:\Users\[username]\Documents\Visual Studio 2013\Projects\VPARSAPI\Debug\PCOMAPI.exe : fatal error LNK1120: 1 unresolved externals

我不完全确定这个 _hllapi@16 是什么,而且我没有在代码中看到它。自从我使用 C++ 以来已经有一段时间了,所以它可能是我缺少的一些简单的东西。代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "hapi_c.h"


int main(char **argv, int argc) {
    int HFunc, HLen, HRc;
    char HBuff[1];
    struct HLDConnectPS ConnBuff;
    // Send Key string for HOME+string+ENTER:
    char SendString[] = "@0Hello World!@E";

    HFunc = HA_RESET_SYSTEM;
    HLen = 0;
    HRc = 0;
    hllapi(&HFunc, HBuff, &HLen, &HRc);
    if (HRc != HARC_SUCCESS) {
        printf("Unable to access EHLLAPI.\n");
        return 1;
    }

    HFunc = HA_CONNECT_PS;
    HLen = sizeof(ConnBuff);
    HRc = 0;
    memset(&ConnBuff, 0x00, sizeof(ConnBuff));
    ConnBuff.stps_shortname = 'A';
    hllapi(&HFunc, (char *)&ConnBuff, &HLen, &HRc);
    switch (HRc) {
    case HARC_SUCCESS:
    case HARC_BUSY:
    case HARC_LOCKED: // All these are OK
        break;
    case HARC_INVALID_PS:
        printf("Host session A does not exist.\n");
        return 1;
    case HARC_UNAVAILABLE:
        printf("Host session A is in use by another EHLLAPI application.\n");
        return 1;
    case HARC_SYSTEM_ERROR:
        printf("System error connecting to session A.\n");
        return 1;
    default:
        printf("Error connecting to session A.\n");
        return 1;
    }

    HFunc = HA_SENDKEY;
    HLen = strlen(SendString);
    HRc = 0;
    hllapi(&HFunc, SendString, &HLen, &HRc);
    switch (HRc) {
    case HARC_SUCCESS:
        break;
    case HARC_BUSY:
    case HARC_LOCKED:
        printf("Send failed, host session locked or busy.\n");
        break;
    default:
        printf("Send failed.\n");
        break;
    }

    HFunc = HA_DISCONNECT_PS;
    HLen = 0;
    HRc = 0;
    hllapi(&HFunc, HBuff, &HLen, &HRc);

    printf("EHLLAPI program ended.\n");
    return 0;
}

我的链接器标志是:

  • /OUT:"C:\Users[用户名]\Documents\Visual Studio 2013\Projects\VPARSAPI\Debug\PCOMAPI.exe" /MANIFEST /NXCOMPAT
  • /PDB:"C:\Users[用户名]\Documents\Visual Studio
  • 2013\Projects\VPARSAPI\Debug\PCOMAPI.pdb" /DYNAMICBASE "kernel32.lib"
  • “user32.lib”“gdi32.lib”“winspool.lib”“comdlg32.lib”“advapi32.lib”
  • “shell32.lib”“ole32.lib”“oleaut32.lib”“uuid.lib”“odbc32.lib”
  • "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL
  • /PGD:"C:\Users[用户名]\Documents\Visual Studio2013\Projects\VPARSAPI\Debug\PCOMAPI.pgd" /SUBSYSTEM:CONSOLE
  • /MANIFESTUAC:"level='asInvoker' uiAccess='false'"
  • /ManifestFile:"Debug\PCOMAPI.exe.intermediate.manifest"
  • /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

【问题讨论】:

  • “未解析的外部符号”始终是链接器错误。你的链接器标志是什么?
  • @abiessu 我已将我的链接器标志编辑到问题中......我认为
  • _hllapi@16 是您在代码中立即可见的hllapi 函数。但是您从未从任何地方链接该函数的实际定义。必须有某种你应该使用的 HLLAPI 库。我在您的链接器参数列表中看不到任何类似于 HLLAPI 库的内容。
  • 我不熟悉 EHLLAPI,但我在链接器选项中没有看到任何 EHLLAPI 库。不应该至少有一个吗?

标签: c++ hllapi


【解决方案1】:

这是一个链接器错误。您需要将 .lib 文件(即 EHLLAPI 库的导入库)传递给链接器。

事实上,看看documentation,这个库中有很多.lib 文件。您需要仔细研究文档以确定您需要哪些文档。

【讨论】:

  • 啊,谢谢!这摆脱了那个错误,但现在我得到了1&gt;LINK : fatal error LNK1104: cannot open file 'EHLAPI32.lib'。我已将其添加到 Additional Dependencies 字段,并将其路径添加到 Additional Library Directories 字段。
  • 我猜找不到那个文件。您是否加载了其中一个示例以查看其配置方式?
  • 嗯...如果我将完整路径添加到附加依赖项,它就可以工作。我猜 Additional Library Directories 字段不是我想的那样。
  • 不,我认为附加库目录是您的想法。不知道你为什么会遇到问题。我总是这样做的。
  • 嗯。好的,好吧,我会进一步研究它,但与此同时,它是有效的。刚刚使用 API 将我的第一条消息发送到终端模拟器!感谢您的帮助。
【解决方案2】:

编译和链接部分所述,您必须包含 pcscal32.lib 以进行静态链接,这样才能解析 *hapi_c.h* 中的符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 2015-02-28
    • 2011-08-07
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多