1

我想在Visual Studio 2008下使用libgadu(即時消息協議庫)。 我已經下載了libgadu http://toxygen.net/libgadu/files/libgadu-1.8.2.tar.gz,並在cygwin下編譯了它 - ./configure,make,make install。 文件libgadu.h出現在include文件夾中,我複製到另一個文件夾,在VS中標記爲包含files目錄。在Windows下編譯libgadu

我想從文件

#include <cstdio> 
#include <cstdlib> 
#include <iostream> 
#include <libgadu.h> 

using namespace std; 

int main(void) 
{ 
    char password[]= "haslo"; 
    struct gg_session *sesja; 
    struct gg_login_params parametry; 
    struct gg_event *zdarzenie; 

    memset(&parametry, 0, sizeof(parametry)); 
    parametry.uin = 12345; 
    parametry.password = password; 
    parametry.async = 1; 
    parametry.status = GG_STATUS_INVISIBLE; 


    sesja = gg_login(&parametry); 
    if (!sesja) { 
     cout << "Can't connect" << endl; 
     exit(1); 
    } 

    system("PAUSE"); 
} 

編譯代碼在編譯期間我收到兩個錯誤:

Error 1 error LNK2019: unresolved external symbol _gg_login referenced in function _main 1.obj 
Error 2 fatal error LNK1120: 1 unresolved externals 

我應該怎麼做呢?

回答

2

您需要找到已編譯的DLL和LIB文件,或者只是將LIB文件編譯爲靜態庫。這些文件可能會被命名爲libgadu.dll和libgadu.lib。

一旦你有了這些,你可以指示Visual Studio鏈接LIB文件,方法是選擇Project Properties並在鏈接器設置下找到Additional Dependencies。

只需將libgadu添加到所有配置的其他依賴項列表。

0

奇怪的是,因爲在./configure中,在Cygwin中製作,它不會創建任何.dll和.lib文件。

+0

作爲編譯.c文件的結果,該符號可能位於.o(或.obj)文件中。 – 2008-12-06 00:46:33

1

正如弗蘭克已經說過的,這通常意味着一個庫(.lib或.dll)沒有被鏈接。但是,如果成功的編譯不會創建.dll或.lib文件,那麼最可能的情況是Cygwin和VS之間的構建系統不同步。

具體來說,VS項目文件中沒有引用文件。由於在其中定義了一個gg_login函數,我感覺它是libgagdu.c本身。

只需將該文件添加到項目並重建。如果有效,請聯繫libgadu開發人員,以便他們能夠將其修復。