IDE是VS代码,编译器工具包是VS Community2019 amd64。
我已经从github下载了pqxx源代码。
我在控制台项目的根目录中复制了源树。我使用了BUILDING-cmake.md.中提供的说明我正在使用该文件中提到的选项A将pqxx包含在我的项目中。因此,我在主CMakeLists.txt中添加了以下行:
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代码)或编译时出现错误。该项目构建良好,并按预期运行。
当我在项目源代码中使用以下代码时,就会出现问题:
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做了如下修改
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安装目录的bin
和lib
子目录添加到PATH变量中。现在,build命令产生了许多语法错误等等,它们都指向pqxx源树的“include”子目录中的.hxx
文件。(只在这里张贴几篇)
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中添加了下面一行。
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)
但还是没有进展。现在,构建失败了,出现了上述错误。有人知道这里会出什么问题吗?
发布于 2022-11-05 12:58:44
https://stackoverflow.com/questions/74140564
复制相似问题