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

时间:2015-07-14 15:45:11

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

当从C代码生成.so时,符号的名称将被解除标记。

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

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