Graphviz - 无法加载 gvplugin_pango.dll

7

我正在尝试在Windows上从CLion中作为库来运行graphviz。这需要花费我相当长的时间,我希望这是最后一个障碍。当我运行程序时,我看到以下警告,并且没有出现图形。

Warning: Could not load "C:\Program Files (x86)\Graphviz2.38\bin\gvplugin_pango.dll" - can't open the module

我正在使用MinGW 3.22作为工具链运行CLion。下面是CmakeLists和main.c。不幸的是,我无法注册graphviz论坛,所以希望这里有人能提供一些建议。到目前为止,我尝试了以下方法:
  • 安装并使用mingw-64
  • 安装GraphViz的旧版本(2.28,当前版本是2.38)
  • 在cmakelists.txt中包括gvplugin_pango库
  • 更改Graphviz文件夹的权限,允许Everyone完全访问,并测试dot -c可以正常工作
  • 将GVBINDIR环境变量设置为明确指向2.38安装
  • 尝试在Cmakelists.txt中设置m32(不敢肯定我是否做对了)

CmakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(Learning)

set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")
set(GRAPHVIZ_INCLUDE_DIR "C:/Program Files (x86)/Graphviz2.38/include/graphviz")
set(GRAPHVIZ_LIB_DIR "C:/Program Files (x86)/Graphviz2.38/lib/release/lib")

set(SOURCE_FILES main.c)
include_directories("${GRAPHVIZ_INCLUDE_DIR}")
add_executable(Learning ${SOURCE_FILES})

find_library(CGRAPH_LIBRARY cgraph HINTS "${GRAPHVIZ_LIB_DIR}" REQUIRED)
find_library(GVC_LIBRARY gvc HINTS "${GRAPHVIZ_LIB_DIR}" REQUIRED)
target_link_libraries( Learning ${CGRAPH_LIBRARY} ${GVC_LIBRARY} )

Main.c

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <gvc.h>
#include <cgraph.h>

int main() {
    Agraph_t *graph;
    Agnode_t *nodeA, *nodeB;
    Agedge_t *edge1;
    Agsym_t *symbol1;
    GVC_t *gvc;

    gvc = gvContext();
    graph = agopen( "graph", Agdirected, NULL);
    nodeA = agnode(graph, "nodeA", 1);
    nodeB = agnode(graph, "nodeB", 1);
    edge1 = agedge(graph, nodeA, nodeB, 0, 1);
    printf("debug");

    agsafeset(nodeA, "color", "red", "");
    gvLayout(gvc, graph, "dot");
    gvRender(gvc, graph, "dot", NULL);
    agclose(graph);
    return ( gvFreeContext(gvc));
    }
2个回答

0

这个警告可能是由于缺少运行时依赖库pango引起的。您可以尝试安装适当的pangopangocairo包到您的mingw设置中,看看是否解决了这个问题。

如果可以解决问题,请告诉我!


我在mingw安装管理器中找不到pango库,我应该去哪里寻找? - LiamRyan

-1

我对mingw32不熟悉,也不是它的铁粉,但是看起来你需要确定gvplugin_pango.dll及其依赖项可加载。

在Unix中,您会使用实用程序进行此操作,但似乎在mingw中没有“ldd”或“otool”可帮助完成此操作(真的吗?)

以下stackoverflow文章建议直接使用grep查找库文件: 在Linux上查找Win exe所需的DLL(使用mingw交叉编译)的DLLs

该文章指向了2015年的这个工具:https://github.com/gsauthof/pe-util 还有一些更高级的工具,称为“Dependency Walker” http://www.dependencywalker.com

对此给您带来了困扰,深表歉意。


真的,Linux/Unix与这个问题有什么关系?为什么在Linux/Unix中应该有一个股票实用程序/程序来读取可移植可执行文件的依赖项?我对你的惊讶感到惊讶... Dependency Walker是一个Windows程序,它可以读取所有可移植可执行文件的依赖项;它非常古老,但仍然很好用。 - Christos Lytras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接