簡體   English   中英

鏈接錯誤“ LogonUser”正在編譯C ++程序?

[英]Link error “LogonUser” compiling C++ program?

嗨,我正在嘗試編譯此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。 任何想法? [/更新]

我如何聲明多個libpath? 還有其他原因嗎?

一如既往,謝謝大家

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM