Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试编译基本JNI测试代码时VS2010出错_Java_C++_Visual Studio 2010_Java Native Interface - Fatal编程技术网

Java 尝试编译基本JNI测试代码时VS2010出错

Java 尝试编译基本JNI测试代码时VS2010出错,java,c++,visual-studio-2010,java-native-interface,Java,C++,Visual Studio 2010,Java Native Interface,我正在尝试编译一个基本的JNI测试,以准备一个DLL(带有头文件和lib文件),我希望在接下来的几天内收到这个DLL,我需要为它创建一个JNI接口 我尝试将它指向JNI.lib的x64/x86库。我试着不把它指向lib。我试着将它指向include目录的两个x64/x86版本,但它总是出现与下面相同的错误 Visual Studio给了我以下错误,我不知道原因: 1>------ Build started: Project: CLibHelloWorld, Configuration:

我正在尝试编译一个基本的JNI测试,以准备一个DLL(带有头文件和lib文件),我希望在接下来的几天内收到这个DLL,我需要为它创建一个JNI接口

我尝试将它指向JNI.lib的x64/x86库。我试着不把它指向lib。我试着将它指向include目录的两个x64/x86版本,但它总是出现与下面相同的错误

Visual Studio给了我以下错误,我不知道原因:

1>------ Build started: Project: CLibHelloWorld, Configuration: Debug Win32 ------
1>Build started 04/03/2015 19:04:09.
1>InitializeBuildStatus:
1>  Creating "Debug\CLibHelloWorld.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1>  CLibHelloWorld.c
1>Link:
1>     Creating library F:\Work\04-Companies\DigitalARCSystems\KlearKapture\CameraInterface\test\test-jni\Debug\CLibHelloWorld.lib and object F:\Work\04-Companies\DigitalARCSystems\KlearKapture\CameraInterface\test\test-jni\Debug\CLibHelloWorld.exp
1>  test-jni.vcxproj -> F:\Work\04-Companies\DigitalARCSystems\KlearKapture\CameraInterface\test\test-jni\Debug\CLibHelloWorld.dll
1>FinalizeBuildStatus:
1>  Deleting file "Debug\CLibHelloWorld.unsuccessfulbuild".
1>  Touching "Debug\CLibHelloWorld.lastbuildstate".
1>
1>Build succeeded.
1>
1>Time Elapsed 00:00:00.43
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
HelloWorld.java(使用javac HelloWorld.java编译):

h(由javah-jni-HelloWorld生成):


将评论转换为答案,因为它显然有助于解决问题


调查MSBuild问题的一种方法是查看详细日志。从VS命令提示符,cd到项目目录,然后执行命令msbuild MyProject.vcxproj/v:d。这将构建详细的详细级别。在输出中搜索链接器命令,您应该看到如下内容

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /OUT:"c:\my_output_path\myfile.dll" ...

链接器的/OUT选项就是您所追求的。如果链接器根本没有被调用,那么您有一些设置不需要为项目生成二进制文件

错误被隐藏:正在删除文件“Debug\CLibHelloWorld.unsuccessfulbuild”。。。DLL永远不会被删除created@JamieReid所以这个文件不存在<代码>F:\Work\04 companys\DigitalARCSystems\KlearKapture\CameraInterface\test\test jni\Debug\CLibHelloWorld.dll否由于某种原因,它似乎是被创建然后被删除的。从那里的信息中,我似乎只能得出这些结论。
CLibHelloWorld.unsuccessfulbuild
与您的问题无关。这是MSBube使用的标记文件,用于检查是否在中间被杀死或中断。如果MSBuild在生成之前找到此文件,则表示上一个生成严重出错,需要重新生成所有内容。换句话说,它是一种在输出文件状态不一致时禁用增量生成的机制。从VS命令提示符,
cd
到项目目录,然后执行命令msbuild MyProject.vcxproj/v:d。这将构建详细的详细级别。在输出中搜索链接器命令,您应该会看到类似“\link.exe/输出:Mypath\mybinary.dll…`。链接器的/OUT选项就是您所追求的。如果链接器根本没有被调用,那么您有一些设置不需要为项目生成二进制文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
#include "HelloWorld.h"
#include "jni.h"
#include  "stdio.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
    printf("Hello world\n");
    return;
}
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe /OUT:"c:\my_output_path\myfile.dll" ...