从 gwan/libraries 中的 C 库链接另一个库会导致"undefined symbol"错误



我试图在我的c库文件my_uid .c:

中使用标准库液体

gwan/图书馆/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无法启动并打印这样的消息:

link ./init.c: undefined symbol: uuid_generate

这肯定不是安装或非标准路径的问题,因为这样的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("%sn", str);
   xbuf_cat(get_reply(argv), "Hello, World!");
   return 200;
}

问题可能是由于G-Wan首先加载init.c,然后my_uuid.c而不是liquid,即使我在init.c中有#pragma link "uuid"。

有谁知道如何解决这个问题吗?它被认为是有效的链接其他库从c文件库在gwan/库?

我阅读了GWAN的文档。如果您编写自己的库,您应该能够与它很好地集成(将其视为预先存在的库)。

myuuid.h
myuuid.c

然后生成你的库,通过编译myuuid.c:

libmyuuid.a

将库放在gwan/libraries/libuid下。A,并按如下方式尝试。

#include "myuuid.h"
#pragma link "./libraries/myuuid"
int main(int argc, char *argv[])
{
    my_uuid_generate();
    return 0;
}

您可能需要密切关注gwan/logs/gwan.log文件,以查看链接是否有效。您还可以在终端中手动启动GWAN服务器,以查看错误。

servlet可以工作,因为您将脚本直接链接到现有的库(已经编译的代码)。

init.c脚本链接失败,因为"#pragma link "libraries/my_uuid.c"库调用编译库不存在(它仍然是源代码)。

你应该在init.c中使用#include "libraries/my_uuid.c"来让这种结构工作。

有趣的是,当我将init.c文件中的#pragma link "uuid"移到#pragma link "libraries/my_uuid.c"下面时,G-Wan成功启动:

#include <uuid/uuid.h>
#pragma link "libraries/my_uuid.c"
#pragma link "uuid"
int main(int argc, char *argv[])
{
  uuid_t uuid;
  my_uuid_generate(uuid);
  return 0;
}

显然,它改变了G-Wan加载liquid和my_uid .c的顺序。现在,它首先加载liuid(使用uuid_generate()符号),然后加载my_uuid_generate()符号,然后再调用uuid_generate())。

Gil,我是否正确理解当前的G-Wan不是为了提供可控制的库负载顺序而设计的?G-Wan团队是否可以考虑更新G-Wan服务器,以便至少在某种程度上以可控/可预测的顺序加载库?即,在依赖项用户之前加载依赖项。例如,我们应该能够编写如下代码,并让G-Wan服务器首先加载liquid,然后是my_uid .c,然后是init.c:

gwan/图书馆/my_uuid.c:

#pragma link "uuid"

gwan/init.c:

#pragma link "libraries/my_uuid.c"

(注意init.c中没有#pragma link "uuid")

相关内容

  • 没有找到相关文章

最新更新