【问题标题】:Graphviz - Could not load gvplugin_pango.dllGraphviz - 无法加载 gvplugin_pango.dll
【发布时间】:2018-01-28 23:58:21
【问题描述】:

我正在尝试在 Windows 中将 graphviz 作为库从 CLion 运行。我花了很长时间才走到这一步,我希望这是最后的障碍。当我运行程序时,我看到以下警告并且没有图表

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 文件夹的权限以允许对所有人进行完全访问,测试 dot -c 并且工作正常
  • 将 GVBINDIR 环境变量设置为明确指向 2.38 安装
  • 尝试在 Cmakelists.txt 中设置 m32(不是 100% 我这样做正确)

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));
    }

【问题讨论】:

    标签: mingw graphviz clion pango


    【解决方案1】:

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

    让我知道这是否有效!

    【讨论】:

    • 我无法在 mingw 安装管理器中找到 pango 库,还有其他地方我应该寻找吗?
    【解决方案2】:

    我不熟悉 mingw32,或者它的忠实粉丝,但您似乎需要确定 gvplugin_pango.dll 及其依赖项是可加载的。

    在 Unix 中,您可以使用实用程序来执行此操作,但在 mingw 中似乎没有“ldd”或“otool”来帮助解决此问题(真的吗?)

    以下 stackoverflow 文章建议从字面上对库进行 grep Finding DLLs required of a Win exe on Linux (cross-compiled with mingw)?

    那篇文章从 2015 年开始指向这个实用程序:https://github.com/gsauthof/pe-util 还有一个更高级的叫做“Dependency Walker”http://www.dependencywalker.com

    很抱歉给您带来麻烦。

    【讨论】:

    • 真的,这个问题和Linux/Unix有什么关系?为什么应该有一个股票实用程序/程序来读取 Linux/Unix 中的可移植可执行依赖项?我对你的惊讶感到惊讶... Dependency Walker 是一个 Windows 程序,它可以读取所有可移植的可执行依赖项;它很旧,但仍然保存得很好。
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2012-10-31
    • 2021-05-04
    • 1970-01-01
    • 2017-05-08
    • 2018-03-26
    相关资源
    最近更新 更多