0

我正在开发一个程序,它将它的某些部分生成为 c/c++ 库。例如,它创建目录 - lib1、lib2、..、libN。对于每个库,它生成 c/c++ 代码 + Makefile,然后使用 gcc/g++ + ld,最后从库中调用代码。现在的问题是,如果 lib1 有一个函数fun和 libN,当fun从 libN 调用时,会使用 lib1。我尝试了不同版本的 gcc/g++ 直到 v4.7。

4

1 回答 1

3

现在的问题是,如果 lib1 有函数 fun 和 libN,当从 libN 调用 fun 时,会使用 lib1。

大概你在谈论共享库,而不是存档库(你会得到一个多重定义的符号错误)。

是的,它应该是这样工作的,并且一直在 UNIX 上工作。缓存与它无关

如果您在 ELF 平台上,您可能可以通过使用使其更像 Windows -Wl,-Bsymbolic,但您将与默认系统行为作斗争,并且应该会遇到困难,以及许多意想不到的问题。如果fun不需要从 中暴露libX,隐藏符号可见性是您的朋友。

由于您正在为lib1, ...生成代码,因此使用 eg而不是.libN可能更容易避免名称冲突。这也将更加便携,因为它可以在任何地方工作。libX_funfun

更新:

根据接口规范,函数名称必须非常有趣。

根据谁的接口规范?

您显然控制了主程序和库。因此,您可以并且可能应该更改接口规范以避免此问题。

于 2012-07-07T14:29:55.210 回答