小编dbe*_*eer的帖子

可能是未定义的宏:AC_MSG_ERROR

我在configure.ac中有以下内容:

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi
Run Code Online (Sandbox Code Playgroud)

这已经在我们的项目中很长一段时间了,但在一些设置中,我得到这个错误:

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.
Run Code Online (Sandbox Code Playgroud)

最近在上面添加的行:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释导致此错误的原因以及如何追踪问题?

编辑:添加有关差异的详细信息.

有效的盒子:

uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

automake: 1.11.1
autoconf: 2.67
m4: 1.4.14
libtoolize: 2.2.6b
Run Code Online (Sandbox Code Playgroud)

不起作用的盒子:

Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC …
Run Code Online (Sandbox Code Playgroud)

autoconf autotools

106
推荐指数
8
解决办法
12万
查看次数

如何删除awk中的科学记数法?

在下面的awk命令中

 awk '{sum+=$1; ++n} END {avg=sum/n; print "Avg monitoring time = "avg}' file.txt
Run Code Online (Sandbox Code Playgroud)

我应该更改什么来删除科学记数法输出(非常小的值显示为1.5e-05)?

我无法使用OMFT变量成功.

awk

25
推荐指数
3
解决办法
2万
查看次数

无法分配请求的地址 - 可能的原因?

我有一个由主服务器和分布式从服务器组成的程序.从属服务器向服务器发送状态更新,如果服务器在固定时间内没有从特定从属设备收到消息,则它将从属设备标记为关闭.这种情况一直在发生.

通过检查日志,我发现从服务器只能向服务器发送一个状态更新,然后永远不能发送另一个更新,总是无法调用connect()"无法分配请求的地址(99).

奇怪的是,从服务器能够向服务器发送多个其他更新,并且所有连接都发生在同一端口上.似乎这种失败的最常见原因是连接处于打开状态,但我无法找到任何未解决的问题.还有其他可能的解释吗?

为了澄清,这是我如何连接:

struct sockaddr *sa; // parameter
size_t           sa_size; //parameter
int              i = 1;
int              stream;

stream = socket(AF_INET,SOCK_STREAM,0);
setsockopt(stream,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
bindresvport(stream,NULL);
connect(stream,sa,sa_size);
Run Code Online (Sandbox Code Playgroud)

此代码用于获取与另一个服务器的连接,并且这4个调用中的任何一个失败都会导致该函数失败.

c sockets tcp errno

22
推荐指数
4
解决办法
11万
查看次数

pthread_mutex_lock锁定,但未设置所有者

我已经在这个工作了几天 -

作为背景,我正在研究一个单线程C程序并使其成为多线程.我最近发现了一个新的死锁情况,但是当我看到gdb中的互斥锁时,我看到了

__lock = 2但是__owner = 0

这不是递归互斥锁.有没有人见过这个?我正在处理的程序是一个守护程序,这种情况只发生在以高吞吐率执行超过20分钟(大约)然后放松负载之后.如果您有任何想法,我将不胜感激.

编辑 - 我忽略了提及我的所有其他线程此时都处于空闲状态.

干杯

c pthreads

5
推荐指数
2
解决办法
3477
查看次数

任何情况下close()优先于shutdown()?

我是一个开源项目的开发人员,我一直在服务器上遇到一些问题,认为它已经完全回答了一个套接字(这意味着它已经发送了回复或者为了响应失败而关闭了它)并且客户端被困在轮询().经过一些研究,我发现close()并不总是生成POLLHUP事件,但是shutdown(sock,2)确实生成了POLLHUP事件.

鉴于此,我正在考虑在发生错误处理时添加关闭(sock,2)(除了close()调用).有谁知道这会导致问题的原因?我吠叫错了树吗?我想如果服务器认为套接字已关闭,客户端绝对不应该尝试使用该套接字,我想不出有什么理由不添加它,但我没有使用tcp这么久的关系,并会喜欢一些建议.

c sockets shutdown

5
推荐指数
1
解决办法
411
查看次数

C中的常量大小全局数组

我试图找出定义具有恒定大小的全局数组的最佳方法,并且我得出以下选项,所有这些都有自己的缺陷.

// 1:
#define ASIZE 10
int array[ASIZE];

// 2:
enum {ASIZE = 10};
int array[ASIZE];

// 3:
#define ASIZE_DEF 10
static const int ASIZE = ASIZE_DEF;
int array[ASIZE_DEF];
Run Code Online (Sandbox Code Playgroud)

前两个问题是我无法ASIZE从GDB 获得价值.我想第三种选择是最好的,因为我仍然可以转储它的值const,但它也会在另一个宏中泄漏.我可以undef在定义数组后使用宏,const但如果#defineconst它们在数组声明的单独文件中,那么它会有点毛茸茸.

有没有更好的办法?

c gdb

4
推荐指数
3
解决办法
1064
查看次数

标签 统计

c ×4

sockets ×2

autoconf ×1

autotools ×1

awk ×1

errno ×1

gdb ×1

pthreads ×1

shutdown ×1

tcp ×1