zlog交叉编译的问题

发布于 2021-11-13 05:25:20 字数 1944 浏览 742 评论 11

@难易 你好,想跟你请教个问题:

我想在arm上使用zlog系统,编译的步骤如下:

1、./configure --enable-test --host=arm-linux

2、make

但是出现如下错误:

省略前面能编译过的部分

......

/bin/sh ../libtool --tag=CC   --mode=compile arm-linux-gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -D_GNU_SOURCE -pthread -MT category_table.lo -MD -MP -MF .deps/category_table.Tpo -c -o category_table.lo category_table.c

libtool: compile:  arm-linux-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -D_GNU_SOURCE -pthread -MT category_table.lo -MD -MP -MF .deps/category_table.Tpo -c category_table.c  -fPIC -DPIC -o .libs/category_table.o

libtool: compile:  arm-linux-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -D_GNU_SOURCE -pthread -MT category_table.lo -MD -MP -MF .deps/category_table.Tpo -c category_table.c -o category_table.o >/dev/null 2>&1

mv -f .deps/category_table.Tpo .deps/category_table.Plo

/bin/sh ../libtool --tag=CC   --mode=compile arm-linux-gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -D_GNU_SOURCE -pthread -MT zlog.lo -MD -MP -MF .deps/zlog.Tpo -c -o zlog.lo zlog.c

libtool: compile:  arm-linux-gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -D_GNU_SOURCE -pthread -MT zlog.lo -MD -MP -MF .deps/zlog.Tpo -c zlog.c  -fPIC -DPIC -o .libs/zlog.o

zlog.c: In function 'hzlog':

zlog.c:761: error: incompatible type for argument 11 of 'zlog_output'

zlog.c: In function 'hdzlog':

zlog.c:783: error: incompatible type for argument 10 of 'dzlog_output'

make[2]: *** [zlog.lo] 错误 1

make[2]: Leaving directory `/home/work/yaof/workspace/zlog-1.0.7/libzlog'

make[1]: *** [all-recursive] 错误 1

make[1]: Leaving directory `/home/work/yaof/workspace/zlog-1.0.7'

make: *** [all] 错误 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(11

彼岸花ソ最美的依靠 2021-11-17 11:50:21

哦,明白了,谢谢你。那6个线程大慨就需要18M的内存了咯?对我想运行的环境是一个压力啊!

半世蒼涼 2021-11-17 11:49:56

zlog本身不产生进程,看用户程序的进程或者线程有多少。

hzlog是接口函数,不过va_list参数对hzlog是不必要的。

混吃等死 2021-11-17 11:49:39

zlog会产生多少个进程呢?就是zlog最大会占用的内存是多少呢?

葬花如无物 2021-11-17 11:49:39

hzlog这个函数没有被调用,hzlog应该是内部函数,我感觉应该会被调用,要不就是接口函数吧?我这样理解可以不?

沦落红尘 2021-11-17 11:48:53

题外话,zlog为了提高性能,是以空间换时间,

开发的时候我想现在的内存便宜,即使是嵌入式平台也有很多内存

每个进程可能会有2-3MB的内存占用,不知道你的平台内存是否足够?

期待你的运行结果,呵呵

柒夜笙歌凉 2021-11-17 11:48:35

不是扩充,

当时是为了内部接口统一,尽量少写重复的代码

所以在hzlog里面这个参数实际是不需要的

醉生梦死 2021-11-17 11:46:49

恩,编译通了。好像hdzlog这个函数没有调用,是以后扩充需要的吗?

情绪失控 2021-11-17 11:32:49

这么改在我的环境下能通过编译,看看你的情况如何?

不过我觉得不够漂亮,而且传不需要的参数会降低性能。

只是我的zlog.c里面已的zlog_output()和dzlog_output()代码的相似性很高,如果再分的话就有点难看了,看来也只能再度分化,把类似的代码再分,形成4个内部函数,不过这个改变要在下一版本出现。目前你的情况就先改着用下吧。

眉黛浅 2021-11-17 10:40:35

恩,更改后没有报错了。

风透绣罗衣 2021-11-16 22:31:25

为什么我找不到./configure,怎么进行交叉编译

泛泛之交 2021-11-15 23:52:38

 看了一下,是va_list这个参数的问题,在hzlog和hdzlog里面,这个参数是不用的,所以我传值为0,不过看来这在arm上不行。

zlog_output(category, file, filelen, func, funclen, line, level, buf, buf_len, NULL, 0, ZLOG_HEX);

static int zlog_output(zlog_category_t * a_category,

                const char *file, size_t file_len, const char *func, size_t func_len, long line, int level,

                const void *hex_buf, size_t hex_buf_len, const char *str_format, va_list str_args,

                int generate_cmd)

 

我查了一些资料,包括这些

https://bugzilla.redhat.com/show_bug.cgi?id=744707

https://bugs.launchpad.net/maria/+bug/700982

不过里面都没有提具体的解决方法,这里倒是有一个:

http://bugs.mysql.com/bug.php?id=62769&files=1

diff -Naur mysql-4.5.16.orig/sql-common/client_plugin.c mysql-5.5.16/sql-common/client_plugin.c
--- mysql-5.5.16.orig/sql-common/client_plugin.c	2011-09-09 11:56:39.000000000 -0400
+++ mysql-5.5.16/sql-common/client_plugin.c	2011-10-16 23:00:00.708799138 -0400
@@ -228,11 +228,13 @@
 {
   MYSQL mysql;
   struct st_mysql_client_plugin **builtin;
+  va_list unused;
 
   if (initialized)
     return 0;
 
   bzero(&mysql, sizeof(mysql)); /* dummy mysql for set_mysql_extended_error */
+  bzero(&unused, sizeof(unused)); /* suppress uninitialized-value warnings */
 
   pthread_mutex_init(&LOCK_load_client_plugin, MY_MUTEX_INIT_SLOW);
   init_alloc_root(&mem_root, 128, 128);
@@ -244,7 +246,7 @@
   pthread_mutex_lock(&LOCK_load_client_plugin);
 
   for (builtin= mysql_client_builtins; *builtin; builtin++)
-    add_plugin(&mysql, *builtin, 0, 0, 0);
+    add_plugin(&mysql, *builtin, 0, 0, unused);
 
   pthread_mutex_unlock(&LOCK_load_client_plugin);
 
@@ -288,9 +290,13 @@
 mysql_client_register_plugin(MYSQL *mysql,
                              struct st_mysql_client_plugin *plugin)
 {
+  va_list unused;
+
   if (is_not_initialized(mysql, plugin->name))
     return NULL;
 
+  bzero(&unused, sizeof(unused)); /* suppress uninitialized-value warnings */
+
   pthread_mutex_lock(&LOCK_load_client_plugin);
 
   /* make sure the plugin wasn't loaded meanwhile */
@@ -302,7 +308,7 @@
     plugin= NULL;
   }
   else
-    plugin= add_plugin(mysql, plugin, 0, 0, 0);
+    plugin= add_plugin(mysql, plugin, 0, 0, unused);
 
   pthread_mutex_unlock(&LOCK_load_client_plugin);
   return plugin;

我建议你可以试试这么改

/* 761 行附近 */

void hzlog(zlog_category_t * category,
        const char *file, size_t filelen, const char *func, size_t funclen, long line, int level,
        const void *buf, size_t buf_len)
{
        va_list unused;
        zlog_output(category, file, filelen, 
        func, funclen, line, level, buf, buf_len, 
        NULL, unused, ZLOG_HEX);
}

/* 783行附近 */
void hdzlog(const char *file, size_t filelen, const char *func, size_t funclen, long line, int level,
        const void *buf, size_t buf_len)
{
        va_list unused;
        dzlog_output(file, filelen, 
        func, funclen, line, level, buf, buf_len, 
        NULL, unused, ZLOG_HEX);
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文