强制忽略重复符号?

发布于 2024-11-01 22:44:34 字数 302 浏览 1 评论 0原文

我正在从使用静态库的项目构建一些遗留代码。现在,我收到很多这样的错误:

ld: warning: option -m is obsolete and being ignored
ld: duplicate symbol <function name>

有没有办法强制通过构建。从我所看到的“重复”功能是相同的,只是构建过程变得混乱。该项目确实很大(还有一堆遗留的 C 和 C++ 代码),我真的想避免花几个小时研究构建过程。有“快速解决办法”吗?我真的只需要运行这个程序一次,所以我可以忍受(一些)稳定性问题。

I am building some legacy code from projects that uses static libraries. Now, I get lots of errors like this:

ld: warning: option -m is obsolete and being ignored
ld: duplicate symbol <function name>

Is there a way to force through the build. From what I can see the "duplicate" functions are identical, it's just the build process thats gone haywire. The project is really large (and a mess of legacy c and c++ code) and I really want to avoid spending hours investigating the build process. Is there a "quick fix"? I really only need to run this program once, so I can live with (some) stability issues.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沉鱼一梦 2024-11-08 22:44:34

来自 GNU ld 手册页:

       --allow-multiple-definition
       -z muldefs
           Normally when a symbol is defined multiple times, the linker will
           report a fatal error. These options allow multiple definitions and
           the first definition will be used.

From the GNU ld man-page:

       --allow-multiple-definition
       -z muldefs
           Normally when a symbol is defined multiple times, the linker will
           report a fatal error. These options allow multiple definitions and
           the first definition will be used.
风渺 2024-11-08 22:44:34

在我的系统上搜索 man ld (“重复”)时,出现了以下情况:

 --传统格式
       对于某些目标, ld 的输出在某些方面与
       一些现有链接器的输出。该开关要求 ld 使用
       改为传统格式。

       例如,在 SunOS 上,ld 组合了符号中的重复条目
       字符串表。这可以减少输出文件的大小
       调试信息超过 30%。不幸的是,SunOS
       “dbx”程序无法读取生成的程序(“gdb”没有
       麻烦)。 --traditional-format 开关告诉 ld 不要合并
       重复条目。

尝试一下。也许它可以解决你的问题。

A search in man ld (for "duplicate"), on my system, brought this up:

   --traditional-format
       For some targets, the output of ld is different in some ways from
       the output of some existing linker.  This switch requests ld to use
       the traditional format instead.

       For example, on SunOS, ld combines duplicate entries in the symbol
       string table.  This can reduce the size of an output file with full
       debugging information by over 30 percent.  Unfortunately, the SunOS
       "dbx" program can not read the resulting program ("gdb" has no
       trouble).  The --traditional-format switch tells ld to not combine
       duplicate entries.

Try it. Maybe it solves your problem.

甜是你 2024-11-08 22:44:34

如果您使用的是 MinGW-W64,则可以使用 ld 选项

LDFLAGS="-Wl,-allow-multiple-definition"

If you're using MinGW-W64 then you can use the ld option

LDFLAGS="-Wl,-allow-multiple-definition"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文