如果我想使用 LD_PRELOAD 为 C++ 应用程序(使用 g++ 构建)动态链接共享库 (.so),那么 .so 是从 C 源文件(使用 gcc)还是 C++ 源文件生成是否重要(使用 g++)?为什么或为什么不呢?
感谢您帮助我理解这一点。
如果我想使用 LD_PRELOAD 为 C++ 应用程序(使用 g++ 构建)动态链接共享库 (.so),那么 .so 是从 C 源文件(使用 gcc)还是 C++ 源文件生成是否重要(使用 g++)?为什么或为什么不呢?
感谢您帮助我理解这一点。
是的,C++ 可执行文件可以(静态和动态)链接到 C 库。
这完全是故意的。C++ ABI 被设计为向后兼容。
您必须确保在 C++ 程序中编写的函数声明等库符号被标记extern "C"
以表明您正在跨越语言边界。通常,库自己提供的头文件会为您执行此操作。
.so 是如何生成的并不重要。您也应该能够预加载从 FORTRAN 代码生成的 .so。关键问题是确保正确使用 .so 中的符号。
当从 C 代码生成 .so 时,符号的名称是未损坏的。
当从 C++ 代码生成 .so 时,符号的名称会被破坏。
我不确定从 FORTRAN 生成的 .so 中的符号名称是否被损坏。