在C中导出任意符号

时间:2019-06-10 13:58:20

标签: c linux linker clang

让我们说我有翻译单元1:

Object.defineProperty(this, 'index', {
  get() { return index; },
  set() {
    throw new AssertionError("can't set attribute");
  }
});

另外,翻译单元2:

struct SomeData {
    int var1;
    int var2;
    int var3;
} some_data;

union Union1 {
    unsigned char buf[1024];
    struct {
        unsigned char _pad0[8];
        int some_int;
    };
} union1;

我希望这样做,以便翻译单元2中的符号extern int some_int; extern int some_data_var2; 与翻译单元1中的some_int共享相同的内存。同样,我希望翻译中的union1.some_int单元2与翻译单元2中的some_data_var2共享相同的内存。我该怎么做?

这是在Linux上

1 个答案:

答案 0 :(得分:1)

您是否愿意直接将它们作为原始int公开?

因为不是,您可以添加

int& some_int() { return union1.some_int; }
int& some_data_var2() { return some_data.var2; }

到第一个翻译单元,然后在标头中声明这些函数(或者,如果需要,直接在翻译单元2中声明这些函数)。


编辑:由于您在我写完之后删除了C ++标记 ,因此只需更改对指针的引用即可。