c - AIX 中的共享对象加载?

标签 c shared-libraries aix dbx

我有一个 C 程序 hello.c。我创建了一个共享对象 hello.so。

hello.c 和 hello.so 分别位于目录/u/grv/program/hello.c/u/grv/objects/hello.so

LIBPATH 设置为/u/grv/objects:$LIBPATH

当我使用 dbx 调试代码时..dbx 要求我从两个列表中进行选择..

LIBPATH的所有目录中只有一个“hello.so”文件。那么第二个“so”文件来自哪里?

这是 dbx session 的屏幕截图:

(dbx) stop on load "hello.so"
[1] stop on load "hello.so"
(dbx) c
stop:   loaded /u/grv/object/hello.so
[1] stopped in uload at 0x9fffffff0002024 ($t1)
0x9fffffff0002024 (uload+0x104) e8410028          ld   r2,0x28(r1)
(dbx) stop in hello
1. hello.hello
2. glink64.hello
Select one or more of [1 - 2]:

附加信息: genkld 命令没有 hello.so .. 这意味着它没有加载.. 这就是它要求我选择的原因.. 还是还有其他原因..?

如何加载共享对象以使其显示在 genkld 列表中?

最佳答案

很明显,库glink64还包含一个名为hello的入口点。

您可以尝试将函数名称从 hello 更改为更独特的名称,然后让您的应用程序调用这个新的唯一函数名称

我不熟悉 genkld 实用程序,因此无法为您提供帮助

关于c - AIX 中的共享对象加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34674101/

相关文章:

字符数组错误,需要一个表达式,错误

c - 希望简化 C 中的 if 语句链

c - 为什么我不能在 Linux 中使用函数 grantpt?

c++ - 如何判断在哪个.SO库中赋予了C函数?

c - strndup 调用正在破坏堆栈帧

linux - 如何运行时调试共享库?

go - 我们如何将 gcc-go 安装到 AIX 机器 power-pc-7 bigendian 64 位?

c - C中sprintf的段错误

c - 如何编写跨平台的 C 库并将其与 iOS 应用程序链接?

linux - 清除和重建 ldconfig 缓存?