【问题标题】:Will a C compiled .so work with a C++ application?C 编译的 .so 可以与 C++ 应用程序一起使用吗?
【发布时间】:2015-10-03 08:51:28
【问题描述】:

如果我想使用 LD_PRELOAD 为 C++ 应用程序(使用 g++ 构建)动态链接共享库 (.so),那么 .so 是从 C 源文件(使用 gcc)还是从C++ 源文件(使用 g++)?为什么或为什么不呢?

感谢您帮助我理解这一点。

【问题讨论】:

    标签: c++ c shared-libraries dynamic-linking ld-preload


    【解决方案1】:

    是的,C++ 可执行文件可以(静态和动态)链接到 C 库。

    这完全是故意的。 C++ ABI设计为向后兼容。

    您必须确保在 C++ 程序中编写的函数声明等库符号标记为extern "C",以表示您正在跨越语言边界。通常,库自己提供的头文件会为您执行此操作。

    【讨论】:

      【解决方案2】:

      如何生成 .so 并不重要。您也应该能够预加载从 FORTRAN 代码生成的 .so。关键问题是确保正确使用 .so 中的符号。

      当从 C 代码生成 .so 时,符号的名称不会被破坏。

      当从 C++ 代码生成 .so 时,符号的名称会被破坏。

      我不确定从 FORTRAN 生成的 .so 中的符号名称是否损坏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 2010-11-16
        相关资源
        最近更新 更多