簡體   English   中英

Graphviz 作為 Windows 中的庫

[英]Graphviz as library in windows

我正在就 Graphviz 庫與您聯系。 我在 Windows 上使用 graphviz 作為 c++ 代碼和 qt creator 中的庫時觀察到一個錯誤。

根據文檔中的示例,我使用以下函數將點文件轉換為 png 文件:

bool saveImageGV(){       

    GVC_t *gvc= gvContext();

    gvAddLibrary(gvc, &gvplugin_dot_layout_LTX_library);

    gvAddLibrary(gvc, &gvplugin_core_LTX_library);

    gvAddLibrary(gvc, &gvplugin_gd_LTX_library);

    FILE *fp = fopen((pathTmp + ".dot").c_str(), "r");

    Agraph_t *g = agread(fp,0);

    gvLayout(gvc, g, "dot");

    FILE *fp2 = fopen((pathTmp  + ".png").c_str(), "w");

    gvRender(gvc, g, "png", fp2);

    gvFreeLayout(gvc, g);

    agclose(g); fclose(fp); fclose(fp2);

    return (gvFreeContext(gvc));

}

看來在 linux 上,這個函數在 graphviz 2.30 上運行得很好,我成功地將我的 dot 文件轉換為 png 文件。 但是,當我使用 Windows 庫時,出現了具有相同功能的分段錯誤。 我的調查讓我認為問題可能來自 .dll 庫,因為在 linux 上,它適用於 2.30 版本,但不適用於 2.38 版本的庫。 對於windows,2.30和2.38導致同樣的segmentation fault錯誤。

這是一個眾所周知的錯誤嗎?它是否存在另一種在 Windows 上將 dot 文件轉換為 png 文件的方法? 我從“Graphviz2.38\\lib\\release\\lib”文件夾鏈接庫,並從“Graphviz2.38\\lib\\release\\dll”文件夾中獲取dll。

如果您需要更多信息,我提前感謝您的回復。

圖形可視化常見問題解答

可能是因為 stdio 版本錯誤

我在visual studio中發生了分段錯誤,這是解決方案(使用/std:c++latest所以語法不符合標准,代碼僅供理解)

Agiodisc_t my_iodisc = {
    .afread = [](void* chan, char* buf, int bufsize)->int
    {
        return fread(buf, 1, bufsize, (FILE*)chan);
    },
    .putstr = [](void* chan,const char* buf)->int
    {
        return fwrite(buf, 1, strlen(buf), (FILE*)chan);
    },
    .flush = [](void* chan)->int
    {
        return fflush((FILE*)chan);
    }
};
Agdisc_t my_disc = {
    .mem = NULL, // use system default
    .id = NULL, // use system default
    .io = &my_iodisc
};
FILE* p_file = fopen("1.gv", "r");
Agraph_t* g = agread(p_file, &my_disc);
fclose(p_file);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM