【发布时间】:2016-09-10 10:58:37
【问题描述】:
我正在尝试在我的 C 库文件 my_uuid.c 中使用标准库 libuuid:
gwan/libraries/my_uuid.c:
#include <uuid/uuid.h>
#pragma link "uuid"
void my_uuid_generate(uuid_t uuid)
{
uuid_generate(uuid);
}
gwan/init.c:
#include <uuid/uuid.h>
#pragma link "uuid"
#pragma link "libraries/my_uuid.c"
int main(int argc, char *argv[])
{
uuid_t uuid;
my_uuid_generate(uuid);
return 0;
}
但是,G-Wan 无法启动并打印这样的消息:
链接./init.c:未定义符号:uuid_generate
这一定不是 libuuid 安装或非标准路径的问题,因为这样的 servlet 确实可以成功:
#include <uuid/uuid.h>
#pragma link "uuid"
int main(int argc, char *argv[])
{
uuid_t uuid;
char str[256];
uuid_generate(uuid);
uuid_unparse(uuid, str);
printf("%s\n", str);
xbuf_cat(get_reply(argv), "Hello, World!");
return 200;
}
问题可能是由于 G-Wan 先加载 init.c 然后再加载 my_uuid.c 而不是 libuuid,即使我在 init.c 中有 #pragma link "uuid"。
有人知道如何解决这个问题吗? 从 gwan/libraries 中的 C 文件库链接其他库是否有效?
【问题讨论】:
-
“C 文件库”,正如您所说的那样,它们并不是使用 G-WAN 的预期方式,因此我的回复如下。此外,动态链接有开销(内存、缓存行、CPU 缓存),这意味着您应该只将它用于大型库,其大小将取消直接链接的目标代码的资格,因为如果多个 G-WAN 脚本使用它可能会重复。跨度>
标签: g-wan