链接器无法从 json-glib 中找到 'get_int_member_with_default'
Linker can't find 'get_int_member_with_default' from json-glib
我目前正在开发一个与 REST 交互的库 API。此 API 以 JSON 对象响应,我正在使用 json-glib-1.0 对其进行解析。由于对象的某些成员可能不存在,我想使用 Json.Object class 的 get_x_member_with_default 函数。
即使 Vala 和 C 编译器都能看到这些函数,linker 还是给我几个错误:
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 代码并编译和 link 输出 pkg-config --cflags --libs json-glib-1.0
的所有内容。我还需要 link 吗?
您需要安装更新版本的 json-glib,或者更有可能的是,不要使用该符号。 Vala documentation for the symbol shows this is since version 1.6 of the library. This information is taken from the C source for the library and the symbol was added with this commit. The problem is the latest stable release appears to be 1.4.4 - see the source repository tags。所以看起来你必须用最新的符号构建你自己的开发版本或者不使用 get_int_member_with_default ()
.
我目前正在开发一个与 REST 交互的库 API。此 API 以 JSON 对象响应,我正在使用 json-glib-1.0 对其进行解析。由于对象的某些成员可能不存在,我想使用 Json.Object class 的 get_x_member_with_default 函数。 即使 Vala 和 C 编译器都能看到这些函数,linker 还是给我几个错误:
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 代码并编译和 link 输出 pkg-config --cflags --libs json-glib-1.0
的所有内容。我还需要 link 吗?
您需要安装更新版本的 json-glib,或者更有可能的是,不要使用该符号。 Vala documentation for the symbol shows this is since version 1.6 of the library. This information is taken from the C source for the library and the symbol was added with this commit. The problem is the latest stable release appears to be 1.4.4 - see the source repository tags。所以看起来你必须用最新的符号构建你自己的开发版本或者不使用 get_int_member_with_default ()
.