2013-12-03 3 views
1

Добрый день. Я пытаюсь скомпилировать библиотеку для ее использования в Java. Но получить ошибку «ошибка LNK2019: неразрешенный внешний символ». В C++ я не очень понимаю, обратитесь за помощью. Begin файл CPPvC++ Ошибка JNI LNK2019: неразрешенный внешний символ

//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; 
} 

Begin .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); 

Ошибка на Debug

1> ftrJavaScanAPI.obj: ошибка LNK2019: неразрешенный внешний символ ftrScanOpenDevice ссылки в функции Java_com_Futronic_ScanApiHelper_Scanner_OpenDevice

Я понимаю, что необходимо добавить код для экспорта некоторых символов из DLL, чтобы экспортировать библиотеку, но не знаете, как это сделать.

+0

Похоже, что функция 'ftrScanOpenDevice' не экспортируемого должным образом - вы можете увидеть [как сделать это здесь] (http://stackoverflow.com/questions/12573816/what-is-un-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix/12574423 # 12574423) –

ответ

1

Что вы связываете с вашей DLL. В исходных файлах нет функции «ftrScanOpenDevice», убедитесь, что вы добавили в ваш файл соответствующий файл .LIB.

Перед представлением сметы DLL. Заставьте вас скомпилировать и запустить эту простую программу:

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

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

} 

Убедитесь, что вы можете скомпилировать это и создать EXE-файл. Кроме того, ваш исполняемый файл должен работать без ошибок. Он не должен производить никаких выходных данных. Если вы не обнаружили ошибок в файлах DLL, убедитесь, что у вас есть соответствующие DLL-файлы, доступные в вашем пути или в том же каталоге, который содержит ваш EXE-файл. Кроме того, убедитесь, что у вас есть одинаковые библиотеки DLL для вашей последней программы JNI.

Еще одна вещь: вы не должны жестко кодировать абсолютные имена для ваших включенных файлов. Используйте настройки Visual Studio, чтобы добавить 'FTRScanAPI' к вашим путям include и library. Так включаемом директива должна быть только

#include "ftrScanAPI.h" 
+0

Эта небольшая программа генерирует ту же ошибку. ftrJavaScanAPI.obj: ошибка LNK2019: неразрешенный внешний символ ftrScanOpenDevice, на который ссылается функция main – user1563372

+0

Исправление проблемы было разрешено абсолютным путем. – user1563372

Смежные вопросы