在命令提示符下使用 c++ postgresql 编译 JNI 文件出现致命错误
Compiling a JNI file with c++ postgresql in command prompt getting fatal error
执行的命令:
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 文件目录 - C:\Program Files\libpqxx\include
我已将路径包含在 -I
中。
我使用 C++ 为我的 Java 程序使用 JNI 进行后端连接,但无法编译 cpp 文件,出现错误:
HelloJNI.cpp:4:10: fatal error: pqxx/pqxx: No such file or director
4 | #include <pqxx/pqxx>
| ^~~~~~~~~~~
compilation terminated.
执行的代码为:
#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");
}
因为您使用的是 -I"C:\Program Files\libpqxx\include\pqxx"
#include 不应该是
<pqxx/pqxx>
你可以试试-I"C:\Program Files\libpqxx\include"让搜索路径保持一致
编译visual studio中的文件。
在 属性.
中添加相应字段的路径,例如附加包含目录、链接器文件
结束JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj)
在 int main()
方法中进行编译,因为 visual studio 没有 main 方法就无法编译文件。
如果您的程序没有 postgresql,您可以按照与 cmdline 相同的方式进行操作。
执行的命令:
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 文件目录 - C:\Program Files\libpqxx\include
我已将路径包含在 -I
中。
我使用 C++ 为我的 Java 程序使用 JNI 进行后端连接,但无法编译 cpp 文件,出现错误:
HelloJNI.cpp:4:10: fatal error: pqxx/pqxx: No such file or director
4 | #include <pqxx/pqxx>
| ^~~~~~~~~~~
compilation terminated.
执行的代码为:
#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");
}
因为您使用的是 -I"C:\Program Files\libpqxx\include\pqxx" #include 不应该是
<pqxx/pqxx>
你可以试试-I"C:\Program Files\libpqxx\include"让搜索路径保持一致
编译visual studio中的文件。
在 属性.
中添加相应字段的路径,例如附加包含目录、链接器文件结束JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj)
在 int main()
方法中进行编译,因为 visual studio 没有 main 方法就无法编译文件。
如果您的程序没有 postgresql,您可以按照与 cmdline 相同的方式进行操作。