链接问题C/C++

Linking issues C/C++

本文关键字:C++ 问题 链接      更新时间:2023-10-16

我是C&C++和我急需帮助。我想重用供应商已经编码的功能。为此,Vendor给了我.H文件&.lib文件。供应商代码是用Visual C语言开发的,我正试图在Visual C++6中访问这些.lib文件。编译成功。链接时出错。采取的步骤:

  1. 我已经链接了项目设置下的所有.lib文件

我仍然收到以下错误消息:

pricing_w32.obj:错误LNK2001:未解析的外部符号_open_item_info_files调试/pricing_w32.exe:致命错误LNK1120:1个未解析的外部执行link.exe.时出错

下面是我写的代码:

    #include<stdio.h>
    #include<string.h>
    #include<fstream>
    #include<conio.h>
    #include<stdlib.h>
    #include<iostream>
    #include <windows.h>
    extern "C"
    {
    #include<cma_telx.h>
    }
    using namespace std;
    int process_file(char **in_file);
    extern "C"
    {
    void lkup_item_info( void *item );
    int open_item_info_files( int *err );
    int close_item_info_files( int *err );
    int open_item_promo_files( int *err );
    int close_item_promo_files( int *err );
    void lkup_rtn_csp_db( void *itemCspWDB );
    void lkup_rtn_promos_csp_db( void *itemPrmCspWDB );
    int do_empdisc_lookup( struct EMPDISC_RECORD *edisc, int *err );
    int do_empauth_lookup( struct EMPLOYEE_AUTH_REC *eauth, int *err );
    void return_all_promos(struct ALL_PRMINFO_BASE &all_promos);
    } 
    int APIENTRY WinMain(HINSTANCE hInstance,
                 HINSTANCE hPrevInstance,
                 LPSTR     lpCmdLine,
                 int       nCmdShow)
    {
        char UPC[7];
        void *SKU;
     cout<<"Normal end"<<endl;
 int return_code, *err;
 return_code = open_item_info_files(err); 
     cout<<return_code<<"open item return code"<<endl;
     cout<<return_code<<"Close item return code"<<endl;
     return 0;
    }

cma_telx.h包含以下函数原型:

    int open_item_info_files( int *err );

下面是命令的片段:dumpbin/symbols cma_telx.lib

076 00000000 SECT1D未键入()外部|?打开项目信息文件@@YAHPAH@Z(int__cdecl open_item_info_files(int*))标签索引00000083大小00000121行00007129下一个函数0000008E078 00000000 SECT1E未键入静态|.data区段长度9,#重新定位0,#行编号0,校验和145249B4,选择2(任意选择)07A 00000000 SECT1E未键入外部|??_C@_08OOCA@PMSDPTCL$AA@(string') 07B 00000000 SECT1F notype Static | .data Section length 7, #relocs 0, #linenums 0, checksum 7F8A6B53, selection 2 (pick any) 07D 00000000 SECT1F notype External | ??_C@_06CPCO@TSITEM?$AA@ (字符串')07E 00000000 SECT20未键入静态|.data区段长度7,#重定位0,#行编号0,校验和F397CDFF,选择2(任意选择)08000000000 SECT20未键入外部|??_C@_06OHCH@KPXREF$AA@(`string')08100000000 UNDEF nottype()External|_imp_FileManager08200000000 UNDEF非类型()外部|__chkstk

*.lib文件是用于静态链接还是用于dll链接?在我的VC++2010 Express上,我必须在项目属性/C++/代码生成/运行时bib下检查是否链接到DLL(=静态)。

转到未解析外部符号的定义/声明并发布其定义!

首先要检查的是确保您已经添加了.lib文件项目属性>>链接器。我现在在mac上,但你在第二页的链接器设置下添加了.lib,你必须在第一页的链接程序下添加路径。

之后,检查c++>>"代码生成",看看它是否通过MT或MD设置链接。这必须与实际的.lib文件所依据的内容相匹配,因此您可能需要切换它,这可能会奏效。