Java vc++;JNI错误LNK2019:未解析的外部符号

Java vc++;JNI错误LNK2019:未解析的外部符号,java,c++,visual-c++,java-native-interface,Java,C++,Visual C++,Java Native Interface,你好。 我正在尝试编译一个库,以便在Java中使用它。但获取错误“错误LNK2019:未解析的外部符号”。在c++中我不太懂,请寻求帮助。 开始cpp文件 //ftrJavaScanAPI.cpp : Defines the entry point for the DLL application. // #ifdef _WINDOWS #pragma warning (disable:4996) #endif #include "C:\ftrJavaScanAPI\ftrScanAPI.h"

你好。 我正在尝试编译一个库,以便在Java中使用它。但获取错误“错误LNK2019:未解析的外部符号”。在c++中我不太懂,请寻求帮助。 开始cpp文件

//ftrJavaScanAPI.cpp : Defines the entry point for the DLL application.
//
#ifdef _WINDOWS
#pragma warning (disable:4996)
#endif

#include "C:\ftrJavaScanAPI\ftrScanAPI.h"
#include "ftrJavaScanAPI.h"

#ifdef FTR_OS_UNIX
#include <string.h>
#endif

FTRHANDLE hDevice = NULL;
FTRSCAN_IMAGE_SIZE m_ImageSize;
FTR_DWORD m_dwErrCode = 0;

#ifdef _WINDOWS
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;
}
#endif

JNIEXPORT jboolean JNICALL Java_com_Futronic_ScanApiHelper_Scanner_OpenDevice(JNIEnv *env, jobject obj)
{
    hDevice = ftrScanOpenDevice();
    if( hDevice == NULL )
        return JNI_FALSE;
    return JNI_TRUE;
}
//ftrJavaScanAPI.cpp:定义DLL应用程序的入口点。
//
#ifdef_窗口
#杂注警告(禁用:4996)
#恩迪夫
#包括“C:\ftrJavaScanAPI\ftrScanAPI.h”
#包括“ftrJavaScanAPI.h”
#ifdef FTR_OS_UNIX
#包括
#恩迪夫
FTRHANDLE hDevice=NULL;
FTRS扫描图像大小m图像大小;
FTR_DWORD m_dwErrCode=0;
#ifdef_窗口
BOOL APICENT DllMain(模块HMODULE,
德沃德·乌尔打电话的理由,
LPVOID lpReserved
)
{
返回TRUE;
}
#恩迪夫
JNIEXPORT jboolean JNICALL Java_com_Futronic_ScanApiHelper_Scanner_OpenDevice(JNIEnv*env,jobject obj)
{
hDevice=ftrScanOpenDevice();
如果(hDevice==NULL)
返回JNI_FALSE;
返回JNI_TRUE;
}
开始.h文件:

#include <C:\Program Files\Java\jdk1.7.0_05\include\jni.h>
/* Header for class com_Futronic_ScanApiHelper_Scanner */



#ifndef _Included_com_Futronic_ScanApiHelper_Scanner
#define _Included_com_Futronic_ScanApiHelper_Scanner
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_Futronic_ScanApiHelper_Scanner
 * Method:    OpenDevice
 * Signature: ()Z
 */

JNIEXPORT jboolean JNICALL Java_com_Futronic_ScanApiHelper_Scanner_OpenDevice
  (JNIEnv *, jobject);
#包括
/*com_Futronic_ScanApiHelper_类扫描仪的标题*/
#ifndef包括com\u Futronic\u ScanApiHelper\u扫描仪
#定义\u包含\u com\u Futronic\u ScanApiHelper\u扫描仪
#ifdef_uucplusplus
外部“C”{
#恩迪夫
/*
*类别:com_Futronic_ScanApiHelper_扫描仪
*方法:OpenDevice
*签名:()Z
*/
JNIEXPORT jboolean JNICALL Java\u com\u Futronic\u ScanApiHelper\u Scanner\u OpenDevice
(JNIEnv*,jobject);
调试错误

1> ftrJavaScanAPI.obj:错误LNK2019:函数Java_com_Futronic_ScanApiHelper_Scanner_OpenDevice中引用的未解析外部符号FTRSCANopendenDevice


我知道有必要添加代码以从DLL中导出一些符号,以便导出库,但不知道如何执行此操作

链接到DLL的是什么。源文件不包含函数“ftrScanOpenDevice”,请确保将适当的.LIB文件添加到生成中

在介绍DLL的复杂性之前,请先编译并运行以下简单程序:

#include "C:\ftrJavaScanAPI\ftrScanAPI.h"

int main ()
{
   FTRHANDLE hDevice = ftrScanOpenDevice();

}
请确保您可以编译此文件并生成EXE文件。此外,您的可执行文件应无错误运行。它不应生成任何输出。如果未找到有关DLL文件的错误,请确保路径中或包含EXE文件的同一目录中有适当的DLL文件。此外,请确保具有相同的DLL文件DLL可用于您的最终JNI计划

还有一件事,您不应该硬编码include文件的绝对名称。使用Visual Studio设置将“FTRScanAPI”添加到include和库路径中。因此,include指令应该是

    #include "ftrScanAPI.h"

链接到DLL的是什么。源文件不包含函数“ftrScanOpenDevice”,请确保将适当的.LIB文件添加到生成中

在介绍DLL的复杂性之前,请先编译并运行以下简单程序:

#include "C:\ftrJavaScanAPI\ftrScanAPI.h"

int main ()
{
   FTRHANDLE hDevice = ftrScanOpenDevice();

}
请确保您可以编译此文件并生成EXE文件。此外,您的可执行文件应无错误运行。它不应生成任何输出。如果未找到有关DLL文件的错误,请确保路径中或包含EXE文件的同一目录中有适当的DLL文件。此外,请确保具有相同的DLL文件DLL可用于您的最终JNI计划

还有一件事,您不应该硬编码include文件的绝对名称。使用Visual Studio设置将“FTRScanAPI”添加到include和库路径中。因此,include指令应该是

    #include "ftrScanAPI.h"

看起来函数
ftrScanOpenDevice
没有正确导出-您可以看到函数
ftrScanOpenDevice
没有正确导出-您可以看到这个小程序生成了相同的错误。ftrJavaScanAPI.obj:错误LNK2019:函数中引用的未解析外部符号ftrScanOpenDevice此小程序生成相同的错误。ftrJavaScanAPI.obj:错误LNK2019:函数main中引用的未解析外部符号FTRSCANopendenDevice