gpt4 book ai didi

C 库在 Postgres 中给出 '__gxx_personality_v0 ' 错误

转载 作者:行者123 更新时间:2023-11-30 14:26:55 30 4
gpt4 key购买 nike

我正在构建一个新的 64 位 Debian Squeeze 服务器,当我尝试恢复数据库时,Postgres 8.4 报告了有据可查的“未定义 __gxx_personality_v0”错误。

该库构建/安装良好。

但是,源代码是 c,而不是 c++,这似乎是 __gxx_personality_v0 所属的地方。

代码来自 32 位 Etch/postgres 8.1 环境。

我有点陷入困境 - 但我敢打赌解决方案非常简单!

最佳答案

测试一下问题是否确实与 PostgreSQL 有关,或者是否是您的库构建的问题。这是一个简单的程序,您可以使用 dlopen() 您的库并解析符号。编译它:

gcc dlopentest.c -o dlopentest -ldl

...并将其运行为:

./dlopentest /path/to/my/lib.so somesymbol

或了解更多信息前缀LD_DEBUG=symbols(对于其他选项LD_DEBUG=help)例如:

LD_DEBUG=symbols ./dlopentest /path/to/my/lib somesymbol

要查找哪个符号取决于您的代码及其用途。您没有提供足够的信息来说明。

此测试程序不适用于任何需要 postgresql 可执行文件中的符号才能加载和初始化的库,因此,如果您的代码(例如)是过程语言,则它将不会加载。不过,大多数简单的模块都可以正常加载。

您还应该检查以下输出:

ldd /path/to/your/library.so

查看它是否链接到 libstdc++ 或任何您不期望的其他内容。

这是测试程序:

// Compile with a c99 compiler; I don't use oldstyle declarations
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>

int main(int argc, char * argv[]) {

if (argc != 3) {
printf("Usage: %s /path/to/lib/to/load symbol_to_resolve\n", argv[0]);
printf(" eg: %s libc.so.6 gettimeofday\n", argv[0]);
return 1;
}

char * err;
const char * const libname = argv[1];
const char * const symname = argv[2];

dlerror(); // clear dl error state before starting work

void * libhandle = dlopen(libname, RTLD_LAZY);
if ( (err = dlerror()) != NULL ) {
printf("Failed to load library: %s\n", err);
return 2;
}

void * symhandle = dlsym(libhandle, symname);
if ( (err = dlerror()) != NULL ) {
printf("Failed to load symbol: %s\n", err);
return 2;
}
printf("Successfully retrieved symbol %s from library %s\n", symname, libname);

// Optional since we're existing, but good for testing:
if ( (err = dlerror()) != NULL ) {
printf("Failed to close lib during exit: %s\n", err);
return 2;
}

return 0;
}

关于C 库在 Postgres 中给出 '__gxx_personality_v0 ' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369321/

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