Согласно ответу Эмдена Р. Ганснера в списке рассылки 'graphviz-интереса' , это сообщение об ошибке указывает на то, что программе не удалось найти файл конфигурации graphviz.
Файл конфигурации graphviz (config6
) используется библиотекой gvc
для загрузки различных библиотек libgvplugin_...
по требованию.
Ганснер также упоминает, что graphviz поддерживает переменную окружения GVBINDIR
, которая, если она определена, используется для указания каталога, содержащего файл конфигурации graphviz. Это также обсуждается на Как настроить и упаковать Graphviz для Mac App Store? .
В моем случае (где я пытаюсь включить библиотеки graphviz в каркас macOS / Objective-C) подкаталог каркаса (называемый «Библиотеки») содержит файл config6
плюс эти библиотеки libgvplugin_...
(далее в обычные библиотеки графвизов):
Libraries:
config6
libgvplugin_core.6.dylib
libgvplugin_dot_layout.6.dylib
libgvplugin_gd.6.dylib
libgvplugin_neato_layout.6.dylib
libgvplugin_quartz.6.dylib
Из одного из классов фреймворка можно установить переменную окружения GVBINDIR
следующим образом:
NSBundle *containingBundle = [NSBundle bundleForClass:[self class]];
NSURL *librariesDirURL = [[containingBundle bundleURL] URLByAppendingPathComponent:@"Versions/A/Libraries" isDirectory:YES];
if (librariesDirURL) {
setenv("GVBINDIR", (char*)[[librariesDirURL path] UTF8String], 1);
}
Установка переменной среды GVBINDIR
- единственное решение, которое мне помогло.
Я также попробовал решения, упомянутые другими выше, включая явную загрузку плагинов graphviz по умолчанию. Например, _graphContext
определяется как static GVC_t *_graphContext
, этот код:
extern gvplugin_library_t gvplugin_dot_layout_LTX_library;
extern gvplugin_library_t gvplugin_neato_layout_LTX_library;
extern gvplugin_library_t gvplugin_core_LTX_library;
extern gvplugin_library_t gvplugin_quartz_LTX_library;
lt_symlist_t lt_preloaded_symbols[] =
{
{ "gvplugin_dot_layout_LTX_library", &gvplugin_dot_layout_LTX_library},
{ "gvplugin_neato_layout_LTX_library", &gvplugin_neato_layout_LTX_library},
{ "gvplugin_core_LTX_library", &gvplugin_core_LTX_library},
{ "gvplugin_quartz_LTX_library", &gvplugin_quartz_LTX_library},
{ 0, 0}
};
_graphContext = gvContextPlugins(lt_preloaded_symbols, 1);
на самом деле работал для меня. То есть, это вызвало загрузку плагинов graphviz и упомянутое выше сообщение об ошибке («Ошибка: Тип макета:« точка »не распознана. Используйте один из:») исчезло. Однако любой последующий вызов gvLayout()
вызвал для меня сбой в Graphviz (EXC_BAD_ACCESS
).
Итак, сейчас я использую подход к переменной среды.