我目前正在与REST API交互的库上工作。该API使用JSON对象响应,我正在使用json-glib-1.0进行解析。由于该对象的某些成员可能不存在,因此我想使用Json.Object类的get_x_member_with_default函数。 即使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");
}
并使用以下命令进行编译:{{1}}。 这给了我
valac --pkg json-glib-1.0 file.vala
这显然不是图书馆;在编译我的库时,我只生成C代码并编译所有内容并将其与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)
的输出链接。我还需要链接吗?
答案 0 :(得分:2)
您需要安装较新版本的json-glib,或者更有可能不使用该符号。 Vala documentation for the symbol显示这是从库的1.6版开始的。此信息来自库的C源代码,并且符号已用this commit添加。问题在于最新的稳定版本似乎是1.4.4-请参见source repository tags。因此,看起来您必须使用最新的符号来构建自己的开发版本,或者不使用get_int_member_with_default ()
。