Hey Folks我正在尝试编译这个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?是否有其他原因造成这种情况?
一如既往,谢谢你们
答案 0 :(得分: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