Ошибка ссылки "LogonUser" при компиляции программы C ++? - PullRequest
0 голосов
/ 15 июня 2009

Эй, ребята, я пытаюсь скомпилировать эту программу на 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'

потому что теперь он не может распознать другой путь. Любая идея? [/ Update]

Как мне объявить несколько libpaths? что-то еще вызывает это?

Как всегда, спасибо, ребята

1 Ответ

1 голос
/ 15 июня 2009

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
...