Проблемы со ссылками для либального 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 исправлены неявно.)

0 ответов

Другие вопросы по тегам