1

我正在尝试制作一个函数,它将从.dot文件生成带有图形的图像,所以我必须使用graphviz库,这是这个函数:

#include <fstream>
#include <gvc.h>

bool draw_image(const string& path) {
    GVC_t *gvc;
    Agraph_t *gr;
    FILE *fp;
    gvc = gvContext();
    fp = fopen((path + ".dot").c_str(), "r");
    gr = agread(fp, nullptr);
    gvLayout(gvc, gr, "dot");
    gvRender(gvc, gr, "png", fopen((path + ".png").c_str(), "w"));
    gvFreeLayout(gvc, gr);
    agclose(gr);
    return (gvFreeContext(gvc));
}

我正在使用 clion IDE 和 cmake,所以这是我的CMakelists.txt

cmake_minimum_required(VERSION 3.16)
project(untitled)

set(CMAKE_CXX_STANDARD 14)

INCLUDE_DIRECTORIES(SYSTEM "/usr/include/graphviz/")

add_executable(untitled main.cpp)

TARGET_LINK_LIBRARIES(untitled LINK_PUBLIC "/usr/lib/x86_64-linux-gnu/libcgraph.so")

问题是,当我构建项目时,我会收到类似的错误 undefined reference to 'gvContext'

但是clion可以看到这个函数并正确引用gvc.h,所以我认为问题出在CMakeLists.txt

我无法理解如何正确引用 CMake 中的外部库以及要指定哪个文件。那么我该怎么做呢?

4

1 回答 1

1

gvContext是 in libgvc.so,所以你最后的 CMake 行应该是:

target_link_libraries(untitled PUBLIC cgraph gvc)

这利用了target_link_libraries文档的“A plain library name”部分。

于 2020-05-13T09:48:27.320 回答