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