Am doing a JNI wrap on a C++ API, am using VC7 and Eclipse. In preparation, I created a C++ executable which mimicked the flow of the JNI, i.e. a driver file which called methods in file with methods which call the API functions I want to use. That compiled and ran well. The C++ code is as follows:
My header file
The implementation
The driver file
Then I put together the JNi implementation
header file
and the implementation
#ifndef _CRT_SECURE_CPP _OVERLOAD_STAND ARD_NAMES
#define _CRT_SECURE_CPP _OVERLOAD_STAND ARD_NAMES 1
#endif
#include "jsummarize r.h"
#include "inxight-summarizer.h"
#include "inxight-bstream.h"
#include "inxight-failure.h"
#include "inxight-bstream-intf.h"
#include <assert.h>
using namespace inxight;
static summarizer* summarzr;
static summarization_i nput_options* inopt;
static summarization_s entence_output* sentOutput;
static summarization_p hrase_output* phraseOutput;
/*
* Class: com_sra_pipelin e_servers_summa rizer_JSummariz er
* Method: createSummarize r
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_createS ummarizer
(JNIEnv *env, jobject object, jstring resource_dir, jstring license, jstring key) {
const char* rdir;
jboolean rdirCopy;
rdir = env->GetStringUTFCh ars(resource_di r, &rdirCopy);
if(rdir == NULL) {
return 0; /*exception occurred*/
}
printf("rdir %s \n", rdir);
const char* lic;
jboolean licCopy;
lic = env->GetStringUTFCh ars(license, &licCopy);
if(lic == NULL) {
return 0; /*exception ocurred*/
}
printf("lic %s \n", lic);
const char* ckey;
jboolean ckeyCopy;
ckey = env->GetStringUTFCh ars(key, &ckeyCopy);
if(ckey == NULL) {
return 0; /* exception occurred */
}
printf("ckey %s \n", ckey);
summarzr = new summarizer(rdir , lic, ckey);
if(rdirCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(resourc e_dir, rdir);
}
if(licCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(license , lic);
}
if(ckeyCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(key, ckey);
}
return(1);
}
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_setInOp tions
(JNIEnv *env, jobject object, jstring genre, jstring variant, jstring language) {
const char *cgenre;
jboolean genreCopy;
cgenre = env->GetStringUTFCh ars(genre, &genreCopy);
if(cgenre == NULL) {
return 0; /*exception occurred */
}
const char *cvariant;
jboolean cvarCopy;
cvariant = env->GetStringUTFCh ars(variant, &cvarCopy);
if(cvariant == NULL) {
return 0; /*exception occurred*/
}
const char *clang;
jboolean clangCopy;
clang = env->GetStringUTFCh ars(language, &clangCopy);
if(clang == NULL) {
return 0;
}
inopt = new summarization_i nput_options(cg enre, cvariant, clang);
if(genreCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(genre, cgenre);
}
if(cvarCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(variant , cvariant);
}
if(clangCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(languag e, clang);
}
return(1);
}
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_setSent enceNum
(JNIEnv *env, jobject object, jint sentCount, jboolean offset, jboolean nScore) {
bool cOffset = offset ? true:false;
bool cnScore = nScore ? true:false;
unsigned int cnt = (unsigned int)sentCount;
sentOutput = new summarization_s entence_output( cnt, cOffset, cnScore);
return(1);
}
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_setPhra seOpts
(JNIEnv *env, jobject object, jint pCnt, jboolean pOffset) {
unsigned int cCnt = (unsigned int)pCnt;
bool offset = pOffset ? true:false;
phraseOutput = new summarization_p hrase_output(cC nt, offset);
return(1);
}
JNIEXPORT jstring JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_getSumm ary
(JNIEnv *env, jobject object, jstring filePath) {
const char* cfile;
jboolean cfileCopy;
cfile = env->GetStringUTFCh ars(filePath, &cfileCopy);
printf("cfile %s \n", cfile);
if(cfile == NULL) {
return 0;
}
file_byte_strea m* fstream = new file_byte_strea m(cfile);
assert(fstream) ;
assert(summarzr );
assert(inopt);
assert(sentOutp ut);
assert(phraseOu tput);
printf("%s", "past fileio\n");
printf("%s", "Before getSummary");
summarization* summary = new summarization(* summarzr, *fstream,
*inopt, *sentOutput, *phraseOutput);
printf("%s", "Past getSummary");
const int sCnt = summary->number_of_key_ sentences();
const int pCnt = summary->number_of_key_ phrases();
sequence<key_it em>::const_iter ator it = summary->first_key_sent ence();
printf("sent# is %d", sCnt);
int count = 0;
for (;it != summary->end_key_senten ce(); ++it, ++count) {
const inxight::text line = it->item_text();
printf("Sentenc e %i% \n", count);
printf("[len %i%, %i% \n", line.length(), it->get_score()) ;
for(unsigned int i=0; i<line.length() ; i++) {
printf("%c%", line[i]);
}
}
sequence<key_it em>::const_iter ator itr = summary->first_key_phra se();
for (;itr != summary->end_key_phrase (); ++itr) {
printf("%s%", itr->item_text()) ;
}
if(cfileCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(filePat h, cfile);
}
char* r = "results";
return(env->NewStringUTF(r ));
}[/CODE]
I started out by trying to get VC7 executables (cl and linker) to run in Eclipse using an ant script the way I usually do with gcc. Finally, I created a dll project in VC7 and added the header, JNI file and a .DEF file to it. However when I compiled and linked, the .lib file and obj file were created, but no dll and the following errors:
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) class inxight::summar izer_interface * __cdecl inxight::make_s ummarizer(char const *,char const *,char const *)" (__imp_?make_su mmarizer@inxigh t@@YAPAVsummari zer_interface@1 @PBD00@Z) referenced in function "public: __thiscall inxight::summar izer::summarize r(char const *,char const *,char const *)" (??0summarizer@ inxight@@QAE@PB D00@Z)
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) void __cdecl inxight::delete _summarizer(cla ss inxight::summar izer_interface *)" (__imp_?delete_ summarizer@inxi ght@@YAXPAVsumm arizer_interfac e@1@@Z) referenced in function "public: virtual __thiscall inxight::summar izer::~summariz er(void)" (??1summarizer@ inxight@@UAE@XZ )
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) class inxight::summar ization_interfa ce * __cdecl inxight::make_s ummarization(cl ass inxight::summar izer_interface &,class inxight::byte_s tream_interface &,class inxight::summar ization_input_o ptions const &,class inxight::summar ization_sentenc e_output const &,class inxight::summar ization_phrase_ output const &,char const *,unsigned int,char const *)" (__imp_?make_su mmarization@inx ight@@YAPAVsumm arization_inter face@1@AAVsumma rizer_interface @1@AAVbyte_stre am_interface@1@ ABVsummarizatio n_input_options @1@ABVsummariza tion_sentence_o utput@1@ABVsumm arization_phras e_output@1@PBDI 5@Z) referenced in function "public: __thiscall inxight::summar ization::summar ization(class inxight::summar izer_interface &,class inxight::byte_s tream_interface &,class inxight::summar ization_input_o ptions const &,class inxight::summar ization_sentenc e_output const &,class inxight::summar ization_phrase_ output const &,char const *,unsigned int,char const *)" (??0summarizati on@inxight@@QAE @AAVsummarizer_ interface@1@AAV byte_stream_int erface@1@ABVsum marization_inpu t_options@1@ABV summarization_s entence_output@ 1@ABVsummarizat ion_phrase_outp ut@1@PBDI5@Z)
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) void __cdecl inxight::delete _summarization( class inxight::summar ization_interfa ce *)" (__imp_?delete_ summarization@i nxight@@YAXPAVs ummarization_in terface@1@@Z) referenced in function "public: virtual __thiscall inxight::summar ization::~summa rization(void)" (??1summarizati on@inxight@@UAE @XZ)
dllproject error LNK2001: unresolved external symbol "public: __thiscall inxight::failur e::failure(clas s inxight::failur e const &)" (??0failure@inx ight@@QAE@ABV01 @@Z)
dllproject error LNK2001: unresolved external symbol "public: __thiscall inxight::file_n ot_found::file_ not_found(class inxight::file_n ot_found const &)" (??0file_not_fo und@inxight@@QA E@ABV01@@Z)
dllproject error LNK2001: unresolved external symbol "public: virtual __thiscall inxight::file_n ot_found::~file _not_found(void )" (??1file_not_fo und@inxight@@UA E@XZ)
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) public: __thiscall inxight::file_n ot_found::file_ not_found(char const *,char const *)" (__imp_??0file_ not_found@inxig ht@@QAE@PBD0@Z) referenced in function "private: void __thiscall inxight::file_b yte_stream::ope n(char const *)" (?open@file_byt e_stream@inxigh t@@AAEXPBD@Z)
These functions exist in the API, one is as follows:
The macro/preprocessor command INXIGHT_SUMMARI ZER_EXPORT is conditionally set on whether the vendor's dll is being created or not.
I have been through the compile and link command line for the C++ and JNI implementations and can find nothing that has to do with the vendor's code and dll.
So why do these things show up in one implementation and not the other?
My header file
Code:
void createSummarizer(char* rdir, char* lFile, char* key); void createInputOptions(const char* genre, const char* variant, const char* lang, const char* encoding, const char* format); void setSentenceOutput(unsigned int sentences_wanted, bool sentence_offset_only, bool normalize_score); void setPhraseOutput(unsigned int phrases_wanted, bool phrase_offset_only); void getSummary(const char* fileName);
Code:
#include "inxight-summarizer.h" #include "inxight-charptr.h" #include "inxight-text.h" #include "inxight-bstream.h" #include "inxight-unicode.h" #include "inxight-unicode-utils.h" #include <iostream> #include <sys/timeb.h> // for ftime #include <assert.h> using namespace inxight; static summarizer* summarzr; static summarization_input_options* inopt; static summarization_sentence_output* sentOutput; static summarization_phrase_output* phraseOutput; void createSummarizer(char* rdir, char* lFile, char* key) { summarzr = new summarizer(rdir, lFile, key); } void createInputOptions(const char* genre, const char* variant, const char* lang, const char* encoding, const char* format) { inopt = new summarization_input_options(genre, variant, lang, encoding, format); } void setSentenceOutput(unsigned int sentences_wanted, bool sentence_offset_only, bool normalize_score) { sentOutput = new summarization_sentence_output(sentences_wanted, sentence_offset_only, normalize_score); } void setPhraseOutput(unsigned int phrases_wanted, bool phrase_offset_only) { phraseOutput = new summarization_phrase_output(phrases_wanted, phrase_offset_only); } void getSummary(const char* fileName) { file_byte_stream* fs = new file_byte_stream(fileName); assert(fs); assert(summarzr); assert(inopt); assert(sentOutput); assert(phraseOutput); summarization* summary; summary = new summarization(*summarzr, *fs, *inopt, *sentOutput, *phraseOutput); sequence<key_item>::const_iterator it = summary->first_key_sentence(); int count = 0; for (;it != summary->end_key_sentence(); ++it, ++count) { const inxight::text line = it->item_text(); printf("Sentence %i% \n", count); printf("[len %i%, %i% \n", line.length(), it->get_score()); for(unsigned int i=0; i<line.length(); i++) { printf("%c%", line[i]); } printf("%s%","\n"); } printf(" There are %i key phrases: ", summary->number_of_key_phrases()); sequence<key_item>::const_iterator itr = summary->first_key_phrase(); for (;itr != summary->end_key_phrase(); ++itr) { printf("%s%", itr->item_text()); } }
Code:
#include "test.h" void main() { char* rdir = "../lang"; char* lFile = "../lang/license.dat"; char* key = "705553544e1a694a5f59535b561a754a5f485b4e535554491a795557575b545e1a127069757913"; const char* genre = "std"; const char* variant = "std"; const char* lang = "english"; const char* encoding = "cp_1252"; const char* format = "html"; unsigned int sentences_wanted = 5; bool sentence_offset_only = false; bool normalize_score = false; unsigned int phrases_wanted = 0; bool phrase_offset_only = false; const char* fileName = "aaawgqM4Ob.html"; createSummarizer(rdir, lFile, key); createInputOptions(genre, variant, lang, encoding, format); setSentenceOutput(sentences_wanted, sentence_offset_only, normalize_score); setPhraseOutput(phrases_wanted, phrase_offset_only); getSummary(fileName); }
header file
Code:
/* DO NOT EDIT THIS FILE - it is machine generated */ [CODE]#include <jni.h> /* Header for class com_sra_pipeline_servers_summarizer_JSummarizer */ #ifndef _Included_com_sra_pipeline_servers_summarizer_JSummarizer #define _Included_com_sra_pipeline_servers_summarizer_JSummarizer #ifdef __cplusplus extern "C" { #endif /* Inaccessible static: resource */ /* Inaccessible static: license */ /* Inaccessible static: comp_key */ /* Inaccessible static: genre */ /* Inaccessible static: variant */ /* Inaccessible static: language */ /* Inaccessible static: numSentences */ /* Inaccessible static: offset */ /* Inaccessible static: nScore */ /* Inaccessible static: phraseCnt */ /* Inaccessible static: phraseOffset */ /* * Class: com_sra_pipeline_servers_summarizer_JSummarizer * Method: createSummarizer * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_sra_pipeline_servers_summarizer_JSummarizer_createSummarizer (JNIEnv *, jobject, jstring, jstring, jstring); /* * Class: com_sra_pipeline_servers_summarizer_JSummarizer * Method: setInOptions * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_com_sra_pipeline_servers_summarizer_JSummarizer_setInOptions (JNIEnv *, jobject, jstring, jstring, jstring); /* * Class: com_sra_pipeline_servers_summarizer_JSummarizer * Method: setSentenceNum * Signature: (IZZ)I */ JNIEXPORT jint JNICALL Java_com_sra_pipeline_servers_summarizer_JSummarizer_setSentenceNum (JNIEnv *, jobject, jint, jboolean, jboolean); /* * Class: com_sra_pipeline_servers_summarizer_JSummarizer * Method: setPhraseOpts * Signature: (IZ)I */ JNIEXPORT jint JNICALL Java_com_sra_pipeline_servers_summarizer_JSummarizer_setPhraseOpts (JNIEnv *, jobject, jint, jboolean); /* * Class: com_sra_pipeline_servers_summarizer_JSummarizer * Method: getSummary * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_sra_pipeline_servers_summarizer_JSummarizer_getSummary (JNIEnv *, jobject, jstring); #ifdef __cplusplus } #endif #endif
#ifndef _CRT_SECURE_CPP _OVERLOAD_STAND ARD_NAMES
#define _CRT_SECURE_CPP _OVERLOAD_STAND ARD_NAMES 1
#endif
#include "jsummarize r.h"
#include "inxight-summarizer.h"
#include "inxight-bstream.h"
#include "inxight-failure.h"
#include "inxight-bstream-intf.h"
#include <assert.h>
using namespace inxight;
static summarizer* summarzr;
static summarization_i nput_options* inopt;
static summarization_s entence_output* sentOutput;
static summarization_p hrase_output* phraseOutput;
/*
* Class: com_sra_pipelin e_servers_summa rizer_JSummariz er
* Method: createSummarize r
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_createS ummarizer
(JNIEnv *env, jobject object, jstring resource_dir, jstring license, jstring key) {
const char* rdir;
jboolean rdirCopy;
rdir = env->GetStringUTFCh ars(resource_di r, &rdirCopy);
if(rdir == NULL) {
return 0; /*exception occurred*/
}
printf("rdir %s \n", rdir);
const char* lic;
jboolean licCopy;
lic = env->GetStringUTFCh ars(license, &licCopy);
if(lic == NULL) {
return 0; /*exception ocurred*/
}
printf("lic %s \n", lic);
const char* ckey;
jboolean ckeyCopy;
ckey = env->GetStringUTFCh ars(key, &ckeyCopy);
if(ckey == NULL) {
return 0; /* exception occurred */
}
printf("ckey %s \n", ckey);
summarzr = new summarizer(rdir , lic, ckey);
if(rdirCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(resourc e_dir, rdir);
}
if(licCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(license , lic);
}
if(ckeyCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(key, ckey);
}
return(1);
}
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_setInOp tions
(JNIEnv *env, jobject object, jstring genre, jstring variant, jstring language) {
const char *cgenre;
jboolean genreCopy;
cgenre = env->GetStringUTFCh ars(genre, &genreCopy);
if(cgenre == NULL) {
return 0; /*exception occurred */
}
const char *cvariant;
jboolean cvarCopy;
cvariant = env->GetStringUTFCh ars(variant, &cvarCopy);
if(cvariant == NULL) {
return 0; /*exception occurred*/
}
const char *clang;
jboolean clangCopy;
clang = env->GetStringUTFCh ars(language, &clangCopy);
if(clang == NULL) {
return 0;
}
inopt = new summarization_i nput_options(cg enre, cvariant, clang);
if(genreCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(genre, cgenre);
}
if(cvarCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(variant , cvariant);
}
if(clangCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(languag e, clang);
}
return(1);
}
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_setSent enceNum
(JNIEnv *env, jobject object, jint sentCount, jboolean offset, jboolean nScore) {
bool cOffset = offset ? true:false;
bool cnScore = nScore ? true:false;
unsigned int cnt = (unsigned int)sentCount;
sentOutput = new summarization_s entence_output( cnt, cOffset, cnScore);
return(1);
}
JNIEXPORT jint JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_setPhra seOpts
(JNIEnv *env, jobject object, jint pCnt, jboolean pOffset) {
unsigned int cCnt = (unsigned int)pCnt;
bool offset = pOffset ? true:false;
phraseOutput = new summarization_p hrase_output(cC nt, offset);
return(1);
}
JNIEXPORT jstring JNICALL Java_com_sra_pi peline_servers_ summarizer_JSum marizer_getSumm ary
(JNIEnv *env, jobject object, jstring filePath) {
const char* cfile;
jboolean cfileCopy;
cfile = env->GetStringUTFCh ars(filePath, &cfileCopy);
printf("cfile %s \n", cfile);
if(cfile == NULL) {
return 0;
}
file_byte_strea m* fstream = new file_byte_strea m(cfile);
assert(fstream) ;
assert(summarzr );
assert(inopt);
assert(sentOutp ut);
assert(phraseOu tput);
printf("%s", "past fileio\n");
printf("%s", "Before getSummary");
summarization* summary = new summarization(* summarzr, *fstream,
*inopt, *sentOutput, *phraseOutput);
printf("%s", "Past getSummary");
const int sCnt = summary->number_of_key_ sentences();
const int pCnt = summary->number_of_key_ phrases();
sequence<key_it em>::const_iter ator it = summary->first_key_sent ence();
printf("sent# is %d", sCnt);
int count = 0;
for (;it != summary->end_key_senten ce(); ++it, ++count) {
const inxight::text line = it->item_text();
printf("Sentenc e %i% \n", count);
printf("[len %i%, %i% \n", line.length(), it->get_score()) ;
for(unsigned int i=0; i<line.length() ; i++) {
printf("%c%", line[i]);
}
}
sequence<key_it em>::const_iter ator itr = summary->first_key_phra se();
for (;itr != summary->end_key_phrase (); ++itr) {
printf("%s%", itr->item_text()) ;
}
if(cfileCopy == JNI_TRUE) {
env->ReleaseStringU TFChars(filePat h, cfile);
}
char* r = "results";
return(env->NewStringUTF(r ));
}[/CODE]
I started out by trying to get VC7 executables (cl and linker) to run in Eclipse using an ant script the way I usually do with gcc. Finally, I created a dll project in VC7 and added the header, JNI file and a .DEF file to it. However when I compiled and linked, the .lib file and obj file were created, but no dll and the following errors:
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) class inxight::summar izer_interface * __cdecl inxight::make_s ummarizer(char const *,char const *,char const *)" (__imp_?make_su mmarizer@inxigh t@@YAPAVsummari zer_interface@1 @PBD00@Z) referenced in function "public: __thiscall inxight::summar izer::summarize r(char const *,char const *,char const *)" (??0summarizer@ inxight@@QAE@PB D00@Z)
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) void __cdecl inxight::delete _summarizer(cla ss inxight::summar izer_interface *)" (__imp_?delete_ summarizer@inxi ght@@YAXPAVsumm arizer_interfac e@1@@Z) referenced in function "public: virtual __thiscall inxight::summar izer::~summariz er(void)" (??1summarizer@ inxight@@UAE@XZ )
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) class inxight::summar ization_interfa ce * __cdecl inxight::make_s ummarization(cl ass inxight::summar izer_interface &,class inxight::byte_s tream_interface &,class inxight::summar ization_input_o ptions const &,class inxight::summar ization_sentenc e_output const &,class inxight::summar ization_phrase_ output const &,char const *,unsigned int,char const *)" (__imp_?make_su mmarization@inx ight@@YAPAVsumm arization_inter face@1@AAVsumma rizer_interface @1@AAVbyte_stre am_interface@1@ ABVsummarizatio n_input_options @1@ABVsummariza tion_sentence_o utput@1@ABVsumm arization_phras e_output@1@PBDI 5@Z) referenced in function "public: __thiscall inxight::summar ization::summar ization(class inxight::summar izer_interface &,class inxight::byte_s tream_interface &,class inxight::summar ization_input_o ptions const &,class inxight::summar ization_sentenc e_output const &,class inxight::summar ization_phrase_ output const &,char const *,unsigned int,char const *)" (??0summarizati on@inxight@@QAE @AAVsummarizer_ interface@1@AAV byte_stream_int erface@1@ABVsum marization_inpu t_options@1@ABV summarization_s entence_output@ 1@ABVsummarizat ion_phrase_outp ut@1@PBDI5@Z)
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) void __cdecl inxight::delete _summarization( class inxight::summar ization_interfa ce *)" (__imp_?delete_ summarization@i nxight@@YAXPAVs ummarization_in terface@1@@Z) referenced in function "public: virtual __thiscall inxight::summar ization::~summa rization(void)" (??1summarizati on@inxight@@UAE @XZ)
dllproject error LNK2001: unresolved external symbol "public: __thiscall inxight::failur e::failure(clas s inxight::failur e const &)" (??0failure@inx ight@@QAE@ABV01 @@Z)
dllproject error LNK2001: unresolved external symbol "public: __thiscall inxight::file_n ot_found::file_ not_found(class inxight::file_n ot_found const &)" (??0file_not_fo und@inxight@@QA E@ABV01@@Z)
dllproject error LNK2001: unresolved external symbol "public: virtual __thiscall inxight::file_n ot_found::~file _not_found(void )" (??1file_not_fo und@inxight@@UA E@XZ)
dllproject error LNK2019: unresolved external symbol "__declspec(dll import) public: __thiscall inxight::file_n ot_found::file_ not_found(char const *,char const *)" (__imp_??0file_ not_found@inxig ht@@QAE@PBD0@Z) referenced in function "private: void __thiscall inxight::file_b yte_stream::ope n(char const *)" (?open@file_byt e_stream@inxigh t@@AAEXPBD@Z)
These functions exist in the API, one is as follows:
Code:
INXIGHT_SUMMARIZER_EXPORT summarization_interface* make_summarization (summarizer_interface& s, inxight::byte_stream_interface& bstr, const summarization_input_options& input_options, const summarization_sentence_output& sentence_output_options, const summarization_phrase_output& phrase_output_options, const char* query_string, size_t query_length, const char* query_encoding);
I have been through the compile and link command line for the C++ and JNI implementations and can find nothing that has to do with the vendor's code and dll.
So why do these things show up in one implementation and not the other?
Comment