在Windows下编译libgadu

时间:2008-12-05 22:43:59

标签: visual-studio visual-studio-2008 cygwin unresolved-external

我想在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中标记为包含文件目录。

我想从文档中编译代码

#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 

我该怎么办?

3 个答案:

答案 0 :(得分:2)

您需要找到已编译的DLL和LIB文件,如果它已编译到静态库中,则只需找到LIB文件。这些文件可能名为libgadu.dll和libgadu.lib。

有了这些内容后,您可以通过选择“项目属性”并在“链接器”设置下找到“附加依赖项”来指示Visual Studio与LIB文件链接。

只需将libgadu添加到所有配置的其他依赖项列表中。

答案 1 :(得分:1)

正如Frank已经说过的,这通常意味着库(.lib或.dll)没有被链接。但是,如果成功编译不会创建.dll或.lib文件,那么最可能的情况是Cygwin和VS之间的构建系统不同步。

具体而言,VS项目文件中未引用文件。我觉得它本身就是libgagdu.c,因为它中定义了一个gg_login函数。

只需将该文件添加到项目中即可重建。如果有效,请联系libgadu开发人员,以便他们可以在最终修复它。

答案 2 :(得分:0)

这很奇怪,因为在./configure中,make在Cygwin中,它不会创建任何.dll和.lib文件。