Note that there are some explanatory texts on larger screens.

plurals
  1. POJNI in C++ to read file to jbyteArray
    text
    copied!<p>I am writing a C++ program in UNIX to generate a shared library which will be called in java using JNI. This C++ program has to read a file in UNIX box then it will have to be converted into <code>jbyteArray</code> (JNI data type) so that JAVA can use it. </p> <p>I read the file in C++ into <code>char*</code> but could not convert into <code>jbyteArray</code>. Please help it.</p> <p>Code is below::</p> <pre><code>#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;stdio.h&gt; #include "com_sp_dll_NativeMethods.h" // this header file was generated by java using namespace std; JNIEXPORT void JNICALL Java_HelloWorld_displayMessage(JNIEnv *env, jobject obj) { printf("Hello World!\n"); } JNIEXPORT jbyteArray JNICALL Java_com_sp_dll_NativeMethods_getFile(JNIEnv *env, jobject obj) { ifstream fl("/home/rkannan/myFile.txt"); fl.seekg(0, ios::end ); size_t len = fl.tellg(); char *ret = new char[len]; fl.seekg(0, ios::beg); fl.read(ret, len); fl.close(); int i = 0; jbyte *a1 = null; while(ret[i] != '\0'){ cout&lt;&lt;ret[i]; al[i] = ret[i]; i++; } jbyteArray result = env-&gt;NewByteArray( len); env-&gt;SetByteArrayRegion( result, 0, len, (const jbyte*) ret ); delete[] ret; return result; } </code></pre> <p>The error is as follows</p> <pre><code>bash-3.00$ g++ -I /usr/jdk/instances/jdk1.5.0/include -I /usr/jdk/instances/jdk1.5.0/include/solaris -o libSample.so -shared com_sp_dll_NativeMethods.cpp Text relocation remains referenced against symbol offset in file std::__ioinit 0x550 /var/tmp//ccKCiEKq.o std::__ioinit 0x554 /var/tmp//ccKCiEKq.o std::__ioinit 0x588 /var/tmp//ccKCiEKq.o std::__ioinit 0x58c /var/tmp//ccKCiEKq.o .rodata (section) 0x204 /var/tmp//ccKCiEKq.o .rodata (section) 0x208 /var/tmp//ccKCiEKq.o .rodata (section) 0x244 /var/tmp//ccKCiEKq.o .rodata (section) 0x248 /var/tmp//ccKCiEKq.o .rodata (section) 0x2f4 /var/tmp//ccKCiEKq.o .rodata (section) 0x2f8 /var/tmp//ccKCiEKq.o std::fpos&lt;__mbstate_t&gt;::operator long long() const0x348 /var/tmp//ccKCiEKq.o std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char)0x400 /var/tmp//ccKCiEKq.o std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&lt;&lt; &lt;std::char_traits&lt;char&gt; &gt;(std::basic_ostream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char const*)0x2cc /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::is_open()0x260 /var/tmp//ccKCiEKq.o std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;::read(char*, int)0x39c /var/tmp//ccKCiEKq.o JNIEnv_::SetByteArrayRegion(_jbyteArray*, int, int, signed char const*)0x468 /var/tmp//ccKCiEKq.o operator new[](unsigned int) 0x364 /var/tmp//ccKCiEKq.o std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;::seekg(long long, std::_Ios_Seekdir)0x31c /var/tmp//ccKCiEKq.o std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;::seekg(long long, std::_Ios_Seekdir)0x384 /var/tmp//ccKCiEKq.o std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::operator&gt;&gt;&lt;char, std::char_traits&lt;char&gt; &gt;(std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, char*)0x2b4 /var/tmp//ccKCiEKq.o printf 0x20c /var/tmp//ccKCiEKq.o JNIEnv_::NewByteArray(int) 0x444 /var/tmp//ccKCiEKq.o std::ios_base::Init::Init() 0x558 /var/tmp//ccKCiEKq.o std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;::size() const0x14 /var/tmp//ccKCiEKq.o std::cout 0x2c0 /var/tmp//ccKCiEKq.o std::cout 0x2c4 /var/tmp//ccKCiEKq.o std::cout 0x3f4 /var/tmp//ccKCiEKq.o std::cout 0x3f8 /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::basic_ifstream()0x234 /var/tmp//ccKCiEKq.o std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;::operator[](unsigned int) const0x9c /var/tmp//ccKCiEKq.o std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;::operator[](unsigned int) const0x128 /var/tmp//ccKCiEKq.o std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;::operator[](unsigned int) const0x184 /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::open(char const*, std::_Ios_Openmode)0x250 /var/tmp//ccKCiEKq.o std::ios_base::Init::~Init() 0x590 /var/tmp//ccKCiEKq.o std::basic_ios&lt;char, std::char_traits&lt;char&gt; &gt;::eof() const0x288 /var/tmp//ccKCiEKq.o unsigned int const&amp; std::min&lt;unsigned int&gt;(unsigned int const&amp;, unsigned int const&amp;)0x44 /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::~basic_ifstream()0x49c /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::~basic_ifstream()0x4ac /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::~basic_ifstream()0x4d4 /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::~basic_ifstream()0x4f8 /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::close()0x2e4 /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::close()0x3ac /var/tmp//ccKCiEKq.o std::basic_ifstream&lt;char, std::char_traits&lt;char&gt; &gt;::basic_ifstream(char const*, std::_Ios_Openmode)0x300 /var/tmp//ccKCiEKq.o operator delete[](void*) 0x484 /var/tmp//ccKCiEKq.o std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;::tellg() 0x334 /var/tmp//ccKCiEKq.o _Unwind_Resume 0x508 /var/tmp//ccKCiEKq.o ld: fatal: relocations remain against allocatable but non-writable sections collect2: ld returned 1 exit status </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload