【问题标题】:gcc/g++/ld caching?gcc/g++/ld 缓存?
【发布时间】:2012-07-06 22:05:13
【问题描述】:

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

【问题讨论】:

    标签: gcc g++ ld


    【解决方案1】:

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

    大概您在谈论 共享 库,而不是存档库(您会遇到多重定义符号错误)。

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

    如果您使用的是 ELF 平台,则可以使用 -Wl,-Bsymbolic 使其更像 Windows .如果fun 不需要从libX 暴露出来,隐藏的symbol visibility 就是你的朋友。

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

    更新:

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

    根据谁的接口规范?

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

    【讨论】:

    • 根据接口规范,函数名必须是fun
    • -Wl,-Bsymbolic 没有帮助。但是,我在libX 完成工作后立即使用dlclose 解决了这个问题。但是,如果我想并行使用 lib1、..、libN,这将不起作用。
    • 有一个预编译的 MATLAB 代码调用fun,在运行时重新编译成本太高。
    猜你喜欢
    • 1970-01-01
    • 2012-08-12
    • 2010-09-29
    • 1970-01-01
    • 2014-12-03
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多