emscripten-core / emscripten-core/emscripten

[feature request] Rename symbols ("--redefine-sym") or alter the binding of a symbol in wasm-ld (c.f end of issue)

未关闭
#12,167 33 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
C++
星标
27.6k
派生
3.6k
平均合并
1 天 6 小时
30 天内合并 PR
109

描述

**ORIGINAL ISSUE TITLE**: Duplicate symbols when building a busybox-like tool
I'm building a xetex+dvipdfmx busybox-like two-in-one executable with Emscripten. I redefined names of main functions using compiler `-Dmain=...` argument.

I have:
```
libxetex.a
someobjectfile.o jpegimage.o oldxetexmain.o (contains busymain_xetex)

libdvidpfmx.a
someotherobjectfile.o jpegimage.o main.o olddvipdfmxmain.o (contains busymain_dvipdfmx)
```

Both `jpegimage.o` functions are used in `someobjectfile.o`/`someotherobjectfile.o` and export same-named symbols which causes duplicate symbols. Unfortunately the two copies of jpegimage.o are not guaranteed to be exactly same.

At the end of the day I'm interested to only link to `busymain_*` functions and hide all other symbols. Is there a way with Emscripten/llvm-wasm to postproc the static library `*.a` files and hide all unnecessary symbols prior to linking to the final `main.c`?

```cpp
/* main.c */

#include

extern int busymain_xetex(int argc, char* argv[]);
extern int busymain_dvipdfmx(int argc, char* argv[]);

int main(int argc, char* argv[])
{
if(strcmp("xetex", argv[1]) == 0)
return busymain_xetex(argc - 1, argv + 1);
else
return busymain_dvipdfmx(argc - 1, argv + 1);
}
```

Thank you!

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。