我正在开发一个程序,它将它的某些部分生成为 c/c++ 库。例如,它创建目录 - lib1、lib2、..、libN。对于每个库,它生成 c/c++ 代码 + Makefile,然后使用 gcc/g++ + ld,最后从库中调用代码。现在的问题是,如果 lib1 有一个函数fun
和 libN,当fun
从 libN 调用时,会使用 lib1。我尝试了不同版本的 gcc/g++ 直到 v4.7。
问问题
137 次
1 回答
3
现在的问题是,如果 lib1 有函数 fun 和 libN,当从 libN 调用 fun 时,会使用 lib1。
大概你在谈论共享库,而不是存档库(你会得到一个多重定义的符号错误)。
是的,它应该是这样工作的,并且一直在 UNIX 上工作。缓存与它无关。
如果您在 ELF 平台上,您可能可以通过使用使其更像 Windows -Wl,-Bsymbolic
,但您将与默认系统行为作斗争,并且应该会遇到困难,以及许多意想不到的问题。如果fun
不需要从 中暴露libX
,隐藏符号可见性是您的朋友。
由于您正在为lib1
, ...生成代码,因此使用 eg而不是.libN
可能更容易避免名称冲突。这也将更加便携,因为它可以在任何地方工作。libX_fun
fun
更新:
根据接口规范,函数名称必须非常有趣。
根据谁的接口规范?
您显然控制了主程序和库。因此,您可以并且可能应该更改接口规范以避免此问题。
于 2012-07-07T14:29:55.210 回答