gpt4 book ai didi

linux - 遇到错误 "*** glibc detected *** free(): invalid next size (fast)"

转载 作者:IT王子 更新时间:2023-10-28 23:55:27 25 4
gpt4 key购买 nike

请参阅 MSO 问题 A long list of possible duplicates — C memory allocation and overrunning bounds有关密切相关问题的信息。


开发环境:CentOS 4.7、Kdevelop 3.1.1、gcc 3.4.6

我运行一个 Java 测试客户端,该客户端使用 JNI 加载 C++ 共享库。我的应用程序中包含三个组件,

  1. Java 客户端
  2. 充当 JNI 包装器的 C++ 共享库。 (我将其称为“包装库”)
  3. 包含业务对象的 C++ 共享库。 (我称之为“商业图书馆”)

当我运行客户端时,我经常遇到错误,即 *** glibc detected *** free(): invalid next size (fast): 0x080eeef8 ***。此错误出现大约 10 - 11 次,然后应用程序运行。

在我的 Java 客户端中,我首先在静态构造器中加载所需的 C++ 库,如下所示,

static
{
System.Load("/root/Desktop/libs/businesslibrary");
System.out.println("business library loaded");
System.Load("/root/Desktop/libs/wrapperlibrary");
System.out.println("wrapper library loaded");
}

语句“业务库已加载”被打印在控制台上,但之后出现错误 *** glibc...

在wrapperlibrary的项目设置中,指定了businesslibrary为依赖库。所以,即使我省略了加载 businesslibrary 的调用而只写了,

static
{
System.Load("/root/Desktop/libs/wrapperlibrary");
System.out.println("wrapper library loaded");
}

然后首先加载 businesslibrary(通过全局变量创建日志记录),然后加载 wrapperlibrary。控件返回到 java 客户端,并在控制台上打印语句“已加载包装器库”。在此之后有一个电话到 native 方法。但是控件永远不会到达此 native 方法的实现。而在此之前,错误 *** glibc... 再次出现。此外,如果我在 native 方法调用之前插入对另一个 java 类的静态方法的调用,例如,

static
{
System.Load("/root/Desktop/libs/wrapperlibrary");
System.out.println("wrapper library loaded");
System.out.println(Try.temp()); //where temp is a static method of Try class which returns a string.

native method call;

--
--
}

然后 Try.temp() 的输出永远不会被打印出来。

这两种方法中出现问题的可能原因是什么,我应该如何处理?

最佳答案

可能是 Java 本身链接到与您的库不同的 glibc,或者这些库以不同的方式链接/链接到不同的 glibc。
还要检查其中一个库是否链接到 glibc 的调试版本(在带有 C++ 运行时库的 Windows 上遇到这个问题)。尝试将您的库静态链接到 glibc,或者为了排除将包装器和业务库静态链接到一个库中的可能性。

关于linux - 遇到错误 "*** glibc detected *** free(): invalid next size (fast)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com