首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在windows c++应用程序中使用libpqxx

无法在windows c++应用程序中使用libpqxx
EN

Stack Overflow用户
提问于 2022-10-20 13:19:18
回答 1查看 57关注 0票数 0

IDE是VS代码,编译器工具包是VS Community2019 amd64。

我已经从github下载了pqxx源代码。

我在控制台项目的根目录中复制了源树。我使用了BUILDING-cmake.md.中提供的说明我正在使用该文件中提到的选项A将pqxx包含在我的项目中。因此,我在主CMakeLists.txt中添加了以下行:

代码语言:javascript
运行
复制
add_subdirectory(libpqxx build-pqxx)  #libpqxx is the directory containing pqxx source tree

target_link_libraries(myProject PRIVATE pqxx)

在这一步之后,pqxx #include <pqxx/pqxx>的include指令不会在IDE (VS代码)或编译时出现错误。该项目构建良好,并按预期运行。

当我在项目源代码中使用以下代码时,就会出现问题:

代码语言:javascript
运行
复制
pqxx::connection dbConn("user=postgres "
                            "host=192.168.1.10 "
                            "password=Abc@123 "
                            "dbname=dbName ");

如果上面的代码行存在于项目源代码中(即使它没有从任何地方引用),那么程序就会构建得非常好。我甚至在构建过程中看到这个消息pqxx.vcxproj -> D:\myProjectDirectory\build\build-pqxx\src\Debug\pqxx.lib,它指示(我认为) pqxx库已经成功构建。

但是在执行程序时,程序只是退出,没有任何消息或错误。即使我在main()的第一行上启动了一个断点调试器,消息The program '[17572] myProject.exe' has exited with code -1073741515 (0xc0000135).也会失败。

如果注释引用pqxx::connection的源行,则程序在重建后运行良好。

经过一些研究(从中我了解了对pq.lib的依赖),我对主CMakeLists.txt做了如下修改

代码语言:javascript
运行
复制
add_subdirectory(libpqxx build-pqxx)  #libpqxx is the directory containing pqxx source tree


target_link_libraries(myProject PRIVATE pqxx
    PRIVATE "C:\\Program Files\\PostgreSQL\\14\\lib\\libpq.lib"

但问题仍然和以前一样。使用或不带调试器运行时,程序将不带任何消息退出。

在构建或执行过程中缺少错误消息使得无法解决问题。

请帮助我解决这个设置或构建过程中的问题。任何帮助都将不胜感激。

编辑1

我将Postgres安装目录的binlib子目录添加到PATH变量中。现在,build命令产生了许多语法错误等等,它们都指向pqxx源树的“include”子目录中的.hxx文件。(只在这里张贴几篇)

代码语言:javascript
运行
复制
D:\projectHome\libpqxx\include\pqxx/result.hxx(135,55): error C2238: unexpected token(s) preceding ';' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(136,39): error C3646: 'end': unknown override specifier [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(136,43): error C2059: syntax error: ')' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(136,59): error C2238: unexpected token(s) preceding ';' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(137,39): error C3646: 'cend': unknown override specifier [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(137,44): error C2059: syntax error: ')' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(137,60): error C2238: unexpected token(s) preceding ';' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(139,27): error C3646: 'front': unknown override specifier [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(139,32): error C2059: syntax error: '(' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(139,49): error C2238: unexpected token(s) preceding ';' [D:\projectHome\build\myProject.vcxproj]
D:\projectHome\libpqxx\include\pqxx/result.hxx(139,49): fatal error C1003: error count exceeds 100; stopping compilation [D:\projectHome\build\myProject.vcxproj]

经过一些研究,这些错误似乎是由于在构建过程中缺乏c++标准17所致。因此,我在我的项目的主CMakeLists.txt中添加了下面一行。

代码语言:javascript
运行
复制
add_subdirectory(libpqxx build-pqxx)  #libpqxx is the directory containing pqxx source tree
include_directories(libpqxx)

add_executable(myProject gmClientApi.cpp)
target_compile_features(myProject PUBLIC cxx_std_17) // new line added

target_link_libraries(myProject PRIVATE pqxx)

但还是没有进展。现在,构建失败了,出现了上述错误。有人知道这里会出什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-05 12:58:44

多亏了齐瓦列夫

通过将目录添加到PATH系统变量,这个问题得到了真正的解决。

对路径的更改在系统重新启动后生效(通常不是这样)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74140564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档