[英]vc++ JNI error LNK2019: unresolved external symbol
美好的一天。 我正在嘗試編譯一個在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;
}
開始.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);
調試錯誤
1> ftrJavaScanAPI.obj:錯誤LNK2019:函數Java_com_Futronic_ScanApiHelper_Scanner_OpenDevice中引用的未解析的外部符號ftrScanOpenDevice
我了解有必要添加代碼以從DLL中導出某些符號,以便導出庫,但不知道如何做
您要鏈接到DLL的文件是什么。 您的源文件不包含函數“ ftrScanOpenDevice”,請確保您將適當的.LIB文件添加到構建中。
在介紹DLL的復雜性之前。 使您可以編譯並運行以下簡單程序:
#include "C:\ftrJavaScanAPI\ftrScanAPI.h"
int main ()
{
FTRHANDLE hDevice = ftrScanOpenDevice();
}
確保您可以編譯並生成EXE文件。 另外,您的可執行文件應該運行沒有錯誤。 它不應產生任何輸出。 如果遇到找不到DLL文件的錯誤,請確保您的路徑中或包含EXE文件的目錄中都有適當的DLL文件。 另外,請確保您具有與最終JNI程序相同的DLL。
還有一件事,您不應該對包含文件的絕對名稱進行硬編碼。 使用Visual Studio設置將“ FTRScanAPI”添加到您的包含和庫路徑。 因此,您的include指令應為
#include "ftrScanAPI.h"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.