【发布时间】:2013-08-12 08:05:18
【问题描述】:
如果我有两个这样的 C 结构:
struct buffer_t {
void *buffer;
int length;
};
struct type_t {
int a;
struct buffer_t buf;
double c;
} obj;
我想导出obj 的第二个字段buf,以便可以从另一个文件中引用它,例如extern struct buffer_t buffer(或其他),有什么方法可以实现吗?我需要导出obj.buf 结构,而不是指向它的指针。
编辑
我需要专门导出obj.buf,而不是整个obj 结构。
EDIT2
我想我最好用汇编代码来解释我需要什么。编译器应该为obj的声明生成以下汇编代码:
.data
.align 8
.obj:
.long 0 # obj.a
.zero 8 # obj.buf.buffer
.zero 4 # obj.buf.length
.quad 0 # double 2
.size obj, 32
但我想强迫它产生类似的东西:
.globl obj_buf
.data
.align 8
.obj:
.long 0 # obj.a
obj_buf:
.zero 8 # obj.buf.buffer
.zero 4 # obj.buf.length
.quad 0 # double 2
.size obj, 32
因此obj.buf 由符号标识。那么,有什么方法可以让 C 编译器(GCC 或 Clang)为 obj.buf 分配一个符号?
【问题讨论】:
-
您可以将结构定义放在您的界面中——让其他人创建相同的结构?我认为您不了解结构是什么。
-
@JacobPollack 是的,结构定义是公开的,因此任何人都可以创建
type_t和buffer_t结构。在我的程序中,我有几十个type_t结构,但obj一个很特殊,我需要导出它的buf字段。 -
@JacobPollack 顺便说一下,那些
type_t结构当然是全球性的。 -
为什么不能使用指向缓冲区的指针并在使用时取消引用它?
-
@alk 好吧,导出指向
obj.buf的指针是最简单的方法。但是,不幸的是,obj.buf是作为struct buffer_t变量从另一个库导入的,而不是struct buffer_t *变量。
标签: c gcc struct export symbols