'Compiling a JNI file with c++ postgresql in command prompt getting fatal error
Command executed:
g++ -I"C:\Program Files\Java\jdk-16.0.2\include" -I"C:\Program Files\Java\jdk-16.0.2\include\win32" -I"C:\Program Files\libpqxx\include\pqxx" -shared -o hello.dll HelloJNI.cpp
pqxx file dir - C:\Program Files\libpqxx\include
I have included the path with -I
.
I am using C++ for the backend connection for my Java program using JNI and unable to compile the cpp file, getting error as:
HelloJNI.cpp:4:10: fatal error: pqxx/pqxx: No such file or director
4 | #include <pqxx/pqxx>
| ^~~~~~~~~~~
compilation terminated.
The executed code is:
#include <jni.h> // JNI header provided by JDK
#include <iostream> // C++ standard IO header
#include "HelloJNI.h" // Generated
#include <pqxx/pqxx>
#include <string>
using namespace std;
// Implementation of the native method sayHello()
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj)
{
try
{
std::string connectionString = "host=localhost port=5432 dbname=postgres user=postgres password =caNarain@2002";
pqxx::connection connectionObject(connectionString.c_str());
pqxx::work worker(connectionObject);
pqxx::result response = worker.exec("SELECT * FROM books ORDER BY BOOK_ID");
for (size_t i = 0; i < response.size(); i++)
{
std::cout << response[i][0] << " " << response[i][1] << " " << response[i][2] << " " << response[i][3] << " " << response[i][4] << " " << response[i][5] << std::endl;
}
return;
}
catch (const std::exception& e)
{
std::cerr << e.what() << std::endl;
}
system("pause");
}
Solution 1:[1]
Compile the file in visual studio.
Add the paths to the respective fields like additional include directories, linker files in the property.
conclude the JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj)
inside a int main()
method to compile since visual studio cannot compile the files without main method.
you can follow same as cmdline if your program doesn't have postgresql.
Solution 2:[2]
Since you are using -I"C:\Program Files\libpqxx\include\pqxx" The #include should not be
<pqxx/pqxx>
You can try -I"C:\Program Files\libpqxx\include" to make the search path consistent.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Narain C A |
Solution 2 | SeanH |