【问题标题】:Link error "LogonUser" compiling C++ program?链接错误“LogonUser”编译 C++ 程序?
【发布时间】:2009-06-15 18:31:11
【问题描述】:

大家好,我正在尝试编译这个 C++ 程序:

#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h> 
#include <Windows.h>
#include "Validate.h"    

JNIEXPORT jstring JNICALL Java_Validate_takeInfo(JNIEnv *env, jobject obj,
        jstring domain, jstring id, jstring idca, jstring password) 
{
    const char *nt_domain;
    const char *nt_id;
    const char *nt_idca;
    const char *nt_password;

    nt_domain = env->GetStringUTFChars(domain, NULL);
    nt_id = env->GetStringUTFChars(id, NULL);
    nt_idca= env->GetStringUTFChars(idca, NULL);
    nt_password = env->GetStringUTFChars(password, NULL);

        HANDLE hToken = 0;
    char *otherString;
    bool aut;

        aut = LogonUser(nt_id, nt_domain, nt_password, LOGON32_LOGON_NETWORK,
                    LOGON32_PROVIDER_DEFAULT, &hToken );
    if(aut)
    {
        otherString = "true";
    }
    else
    {
        otherString = "false";
    }
    jstring newString = env->NewStringUTF((const char*)otherString);
    return newString;
}

int main()
{
    return 0;
}

使用这个命令:

cl -I"c:\Program files\Java\jdk1.5.0_07\include"
   -I"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include"
   -I"c:\program files\java\jdk1.5.0_07\include\win32"
   -LD D:\JNI\%filename%.cpp -D:\JNI\Fe%filename%.dll -link
   -LIBPATH:"C:\Program Files\Microsoft Visual Studio 8\VC\lib"
   -LIBPATH:"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib"

但是我总是收到以下错误:

Validate.obj : error LNK2019: unresolved external symbol __imp__LogonUserA@24 
referenced in function _Java_Validate_takeInfo@24
Validate.dll : fatal error LNK1120: 1 unresolved externals

我可能已经尝试了上千种不同的编译方式来使用 LIBPATH 开关。

-link -LIBPATH:"C:\Program Files\Microsoft Visual Studio 8\VC\lib";"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib"

还有很多其他的。

[更新] 如果我切换 lib 路径并将“\PlatformSDK\lib”放在“\VC\lib”开关之前,我会收到此错误:

LINK : fatal error LNK1104: cannot open file 'uuid.lib'

因为它现在无法识别其他 libpath。任何想法? [/更新]

如何声明多个库路径?还有其他原因吗?

一如既往,谢谢大家

【问题讨论】:

    标签: c++ visual-studio linker linker-errors


    【解决方案1】:

    MSDN 表示LogonUser 在 Advapi32.lib 中。看起来问题在于您不包括 Advapi32.lib。 LIBPATH 影响链接器搜索库的位置,而不是链接器搜索的库,并且您没有告诉链接器搜索 Advapi32.dll。

    在 Visual C++ 2008 上,您应该能够通过进入项目、属性、配置属性、链接器、附加依赖项来包含 Advapi32.lib。我不确定其他版本。)

    在命令行中,您应该能够将 Advapi32.lib 列为要链接的附加文件。试试这个:

    cl -I"c:\Program files\Java\jdk1.5.0_07\include"
       -I"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include"
       -I"c:\program files\java\jdk1.5.0_07\include\win32"
       -LD D:\JNI\%filename%.cpp -D:\JNI\Fe%filename%.dll -link
       -LIBPATH:"C:\Program Files\Microsoft Visual Studio 8\VC\lib"
       -LIBPATH:"C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib"
       Advapi32.lib
    

    【讨论】:

    • Advapi32.lib 位于我试图包含的“C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib”文件夹中。我认为问题与我需要声明多个 libpath 的事实有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多