Проблемы со ссылками для либального MWE
Я пытаюсь создать MWE, используя libical, с примером, в значительной степени вырезанным и вставленным из libical docs, следующим образом:
#include <stdlib.h>
#include <libical/ical.h>
const char* calendar_file = "orage_export.ics";
//*****************************************************************************
char* read_stream(char* s, size_t size, void* d)
{
return fgets(s, size, (FILE*)d);
} // read_stream()
//*****************************************************************************
int main()
{
char* line;
icalcomponent* component;
icalparser* parser = icalparser_new();
// open file (first command-line argument)
FILE* stream = fopen(calendar_file, "r");
if(stream == NULL)
{
printf("unable to open %s\n", calendar_file);
exit(-1);
}
// Associate the FILE with the parser so that read_stream will have access to it
icalparser_set_gen_data(parser, stream);
do
{
// Read the file, line-by-line, and parse the data
line = icalparser_get_line(parser, read_stream);
component = icalparser_add_line(parser, line);
// If icalparser has finished parsing a component, it will return it
if(component != 0)
{
// Print the parsed component
printf("%s", icalcomponent_as_ical_string(component));
icalparser_clean(parser);
printf("\n---------------\n");
icalcomponent_free(component);
}
}
while(line != 0);
fclose(stream);
return 0;
}
Но у меня возникают проблемы со ссылками, которые я не могу решить. Очевидно, я ссылаюсь на (последнюю версию) libical + pthreads. Затем я получил неопределенную ссылку на ucal_getKeywordValuesForLocale_66, которую я могу разрешить, добавив libicui18n.a. Но затем я получаю неопределенные ссылочные ошибки для "vtable for icu_66::UnicodeString", "icu_66::UnicodeString::setTo" и "icu_66::~UnicodeString" и так далее, которые очень похожи на ошибки C++, связанные с компонентами ICU. Но я создаю простую программу на C?
Какой набор библиотек мне нужен, чтобы заставить MWE работать? И почему я получаю то, что кажется ошибками ссылок на основе классов, при создании ванильной программы на C?
Я использую Linux Mint 20.2 и использую репо-версии всех библиотек, кроме самой libical.
Питер
РЕДАКТИРОВАТЬ: На самом деле, ответил на мой собственный вопрос!
Внимательно изучив (правильно?) результат, неопределенные проблемы были связаны с libicui18n, так что это вообще не проблема iCal. Дох!
Исправление состояло в том, чтобы заметить, что ребята из iCal предоставили скрипт pkg-config, поэтому добавление
pkg-config --libs --cflags libical
чтобы строка компилятора работала. (Я предполагаю, что зависимости ICU исправлены неявно.)