C 编译的 .so 可以与 C++ 应用程序一起使用吗?

Will a C compiled .so work with a C++ application?

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

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

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

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

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

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

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

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

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