2017-08-21 36 views
7

Tôi đang cố gắng chạy graphviz như một thư viện từ CLion trong Windows. Tôi mất khá nhiều thời gian để đạt được điều này và tôi hy vọng đây là rào cản cuối cùng. Khi tôi chạy chương trình, tôi thấy cảnh báo sau và không có biểu đồGraphviz - Không thể tải gvplugin_pango.dll

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

Tôi đang chạy CLion với MinGW 3.22 làm chuỗi công cụ. CmakeLists và main.c là dưới đây. Thật không may tôi không thể đăng ký diễn đàn graphviz vì vậy tôi hy vọng ai đó ở đây có thể có một số gợi ý. Cho đến nay tôi đã cố gắng -

  • Cài đặt và sử dụng mingw-64
  • Cài đặt một phiên bản cũ của GraphViz (2.28, hiện nay là 2,38)
  • Bao gồm các thư viện gvplugin_pango trong cmakelists.txt
  • Thay đổi quyền cho thư mục Graphviz để cho phép truy cập đầy đủ vào Mọi người, kiểm tra dot -c và hoạt động tốt
  • Đặt biến GVvINDIR env để trỏ rõ ràng đến cài đặt 2.38
  • Đã cố gắng thiết lập m32 trong Cmakelists.txt (không phải 100% Tôi đã làm điều này một cách chính xác)

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

Trả lời

0

Cảnh báo có thể được gây ra bởi một sự phụ thuộc thời gian chạy mất tích, thư viện pango. Bạn có thể thử cài đặt gói pango hoặc pangocairo thích hợp cho thiết lập mingw của bạn để xem có giải quyết được sự cố không.

Hãy cho tôi biết nếu nó hoạt động!

+0

Tôi không thể tìm thấy thư viện pango trong trình quản lý cài đặt mingw, có nơi nào khác mà tôi nên tìm không? – SMC

-1

Tôi không quen với mingw32, hoặc một fan hâm mộ lớn của nó, nhưng nó xuất hiện bạn cần phải xác định rằng gvplugin_pango.dll và phụ thuộc của nó là có thể tải.

Trong Unix bạn sẽ sử dụng một tiện ích để làm điều này nhưng dường như không có "ldd" hoặc "otool" để giúp với điều này trong mingw (thực sự?)

Bài viết stackoverflow sau đề nghị theo nghĩa đen grepping thư viện cho Finding DLLs required of a Win exe on Linux (cross-compiled with mingw)?

đó điểm bài viết để tiện ích này từ năm 2015: https://github.com/gsauthof/pe-util và có cái gì đó fancier gọi là "Dependency Walker" http://www.dependencywalker.com

Xin lỗi vì những rắc rối.

+0

* Thực sự *, Linux/Unix phải làm gì với câu hỏi này? Tại sao nên có một tiện ích/chương trình chứng khoán để đọc các phụ thuộc thực thi trong Linux/Unix? Tôi ngạc nhiên bởi sự ngạc nhiên của bạn ... Phụ thuộc Walker là một chương trình Windows mà đọc tất cả các phụ thuộc thực thi di động; nó rất cũ nhưng nó vẫn giữ khá tốt. –

Các vấn đề liên quan