2013-11-27 130 views
-1

我是一個新手C & C++,我迫切需要幫助。我想重新使用已由供應商編碼的功能。爲此,供應商給我提供了.H文件& .lib文件。供應商代碼是使用Visual C語言開發的,我嘗試在Visual C++ 6中訪問這些.lib文件。編譯成功。鏈接時出錯。採取的步驟:鏈接問題C/C++

  1. 我已鏈接項目設置下的所有.lib文件。

我仍然得到以下錯誤消息:

pricing_w32.obj:錯誤LNK2001:解析外部符號_open_item_info_files 調試/ pricing_w32.exe:致命錯誤LNK1120:1周無法解析的外部 錯誤執行鏈接。可執行程序。

下面是代碼,我曾寫入:

#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 /符號cma_telx。 lib

076 00000000 SECT1D notype()External | ?open_item_info_files @@ YAHPAH @ Z(int __cdecl open_item_info_files(int *)) 標記索引00000083大小00000121行00007129下一個函數0000008E 078 00000000 SECT1E notype靜態| .data 段長度9,#relocs 0,#linenums 0,校驗和145249B4,選擇2(挑選任何) 07A 00000000 SECT1E notype外部| ?_ 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 | [email protected][email protected][email protected] ( string') 07E 00000000 SECT20 notype靜態| .data 段長度7,#relocs 0,#linenums 0,校驗和F397CDFF,選擇2(挑選任何) 080 00000000 SECT20 notype外部| _ _ @ @ 06OHCH @ KPXREF $ AA @(`string') 081 00000000 UNDEF notype()External | _ imp _FileManager 082 00000000 UNDEF notype()External | __chkstk

+0

錯誤顯示你編譯時不喜歡那些庫文件 – gongzhitaao

+0

@gongzhitaao,* link *,你的意思是? – Raptor

+1

你確定庫中有一個叫做'open_item_info_files'的函數嗎?你的拼寫/大小寫/標點完全正確嗎?你可以看看這個問題http://stackoverflow.com/questions/305287/how-to-see-the-contents-of-windows-library-lib它可以幫助你「窺視」圖書館。要麼你沒有連接正確,要麼你要求的東西不在那裏。這將幫助您縮小搜索範圍。 – Floris

回答

0

靜態鏈接或dll鏈接的* .lib文件?在我的VC++ 2010 Express中,我必須檢查項目屬性/ C++/codegeneration/runtime-bib是否鏈接到DLL或不DLL(靜態)。

進入定義/聲明您的未解析的外部符號併發布其定義!

+0

我正在使用visual C++ 6 – Ravi

0

首先要檢查的是確保已添加.lib文件項目屬性>>鏈接器。我現在在我的Mac上,但是在鏈接器設置下的第二頁上添加.lib,並且必須在鏈接器下的第一頁上添加路徑。

之後,檢查C++ >>'代碼生成',看看它是通過MT或MD設置鏈接。這必須與實際的.lib文件構建的內容相匹配,因此您可能需要切換它,這可能會有所裨益。

+0

我已經嘗試了兩天將.lib文件添加到鏈接器和/ mt&/ MD選項。直到現在沒有任何工作我在原始問題中提供了更多信息。請看看它。 – Ravi