Линкер не может найти 'get_int_member_with_default' из json-glib - PullRequest
0 голосов
/ 25 июня 2019

В настоящее время я работаю над библиотекой, которая взаимодействует с REST API.Этот API отвечает с помощью объекта JSON, который я анализирую с помощью json-glib-1.0.Поскольку некоторые члены объекта могут не существовать, я хотел использовать функцию get_x_member_with_default класса Json.Object.Хотя и компилятор Vala, и C видят функции, которые компоновщик выдает мне несколько ошибок:

Undefined symbols for architecture x86_64:
  "_json_object_get_boolean_member_with_default", referenced from:
      _discord_message_construct in message-f5c60f.o
  "_json_object_get_int_member_with_default", referenced from:
      _discord_message_construct in message-f5c60f.o
  "_json_object_get_string_member_with_default", referenced from:
      _discord_message_construct in message-f5c60f.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Чтобы воспроизвести это, вы можете попробовать этот код:

void main() {
    string json = "{\"one\": 1337}";
    Json.Parser parser = new Json.Parser();
    parser.load_from_data(json, -1);
    int64 val = parser.get_root().get_object().get_int_member_with_default("one", 666);
    stdout.printf(@"$val\n");
}

и скомпилировать его сэта команда: valac --pkg json-glib-1.0 file.vala.Это дает мне

Undefined symbols for architecture x86_64:
  "_json_object_get_int_member_with_default", referenced from:
      __vala_main in json2-ec99c2.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Это, очевидно, не библиотека;при компиляции моей библиотеки я генерирую только код C, компилирую и связываю все с выводом pkg-config --cflags --libs json-glib-1.0.Есть ли что-то, что я должен связать дополнительно?

1 Ответ

2 голосов
/ 25 июня 2019

Вам необходимо установить более новую версию json-glib или, скорее, не использовать этот символ. Документация Vala для символа показывает, что это начиная с версии 1.6 библиотеки. Эта информация взята из источника C для библиотеки, и символ был добавлен с this commit . Проблема в том, что последняя стабильная версия выглядит как 1.4.4 - см. теги исходного репозитория . Похоже, вы должны создать свою собственную версию разработки с последними символами или не использовать get_int_member_with_default ().

...