描述:
我想在我的 Cpp 项目中加入一个 Graphviz 库
gvc
。
Cpp 项目是一个极其简化的语法分析器,我包含了 graphviz/gvc.h
来绘制语法分析树。
在涉及graphviz之前我成功构建并运行了项目,并且程序返回了预期的结果。但是当我尝试将graphviz引入进来时遇到了困难。
我通过 CMake
和
MinGW
工具构建项目。然后我写了我的
CMakeLists.txt
如下:
cmake_minimum_required(VERSION 3.10)
project(Analyser)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(GV_HOME "D:/Program Files (x86)/Graphviz")
file(GLOB SRC CONFIGURE_DEPENDS src/*.cpp)
include_directories(${GV_HOME}/include)
include_directories(include)
link_directories(${GV_HOME}/lib)
add_executable(${PROJECT_NAME} src/main/main.cpp ${SRC})
target_link_libraries(${PROJECT_NAME} gvc cgraph)
环境:
编译器工具链:MinGW-64 with GCC 13.2.0
CMake 版本:3.27.9
graphviz:从官网获取,基于Visual Studio C++ 2019构建
系统:带有 64 位 x86 CPU 的 Windows 10
问题:
然后我成功编译了项目并得到了一个.exe文件。
好吧,奇怪的事情发生了:它运行时没有在终端上返回任何结果。
我无法弄清楚原因...项目结构如下:
project---
|*--src
| |\*--main
| | |--main.cpp
| | |--input.cpp
| |
| |--LexicalAnalyser.cpp
| |--SyntaxAnalyser.cpp
| |--ErrorProcessor.cpp
| |--utils.cpp
|
|*--build
|
|*--include
| |--SyntaxAnalyser.h
| |--LexicalAnalyser.h
| |--utils.h
|
|--CMakeLists.txt
一开始涉及到graphviz的时候,我无法编译项目。然后我尝试在
cgraph
中的
target_link_libraries()
中添加一个条目
CMakeLists.txt
,最终成功编译,但无法正常运行.exe。我想知道如何解决这个问题。
努力:
gdb
进行调试,但无法成功运行
gdb
,并退出并显示信息:
[Thread 8244.0x1d30 exited with code 3221225781]
,
During startup program exited with code 0xc0000135.
graphviz/gvc
来绘制简单的有向图。尽管如此,成功地编译了它,但未能运行它并返回预期的结果。也尝试对其进行调试,遇到了与上述相同的信息。
解决方案(2024/5/1):
NOT将necessary DLL
放在工作目录中引起的,尽管我已经在
system environment
中设置了graphviz二进制目录的路径。
CMakeLists.txt
中DLL目录的路径,或者在项目下的适当目录中复制DLL。
necessary DLLs.
所以程序在没有加载DLL的情况下无法运行,自然就等于什么都没发生。这里包括第三方库(graphviz)需要考虑DLL。