c++ - 我可以使用 dlopen 使用 C 从 C++ 编译的共享库吗

标签 c++ c shared-libraries

首先我尝试在 C 中创建简单的共享库并使用 dlopen 调用该库并且工作正常。然后我有一个需求,我可以有一个cpp文件来调用c编译的共享库。

在简单的程序中调用没问题。这是否意味着我们可以在更大的程序中从 C++ 调用 C 创建的库???

在 C++ 中使用 dlopen 的 soe 文档中提到使用 extern ,因为我认为共享库是用 C++ 编写的,因此将其转换为 C Like 。 Aand如果它已经在c中。我们不需要使用 extern 并直接从 C++ 中使用。

我说的对吗??

最佳答案

在所有主要操作系统上,C 和 C++ 编译的函数调用约定是相同的。 C++ 添加的主要区别在于,类成员函数有一个额外的隐式参数(this 指针),并且为了反射(reflect)类型签名而对其名称进行了修饰,因此单个函数名称可以是重载。除了调用函数对 C 和 C++ 的作用相同之外。

当您使用 dlopen 和以后的 dlsym 时,唯一需要注意的是符号的命名。但是,由于您打算访问 C 库 vom C++ 名称修改不是问题;您可以只使用您最初编写的符号标识符。

关于c++ - 我可以使用 dlopen 使用 C 从 C++ 编译的共享库吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29118404/

相关文章:

c++ - 获取指向成员 std::string::size 的指针无法与 libc++ 链接,但适用于 libstdc++

c++ - 标题困惑。编译器不识别数据类型

c++ - 如何让 clang 链接到没有 "lib"前缀的库?

c++ - 使用用 c/c++ 编写的共享库的 Linux C 程序

linux - 加载共享库时出错 : libpoppler. so.58: 无法打开共享对象文件

c++ - cout对齐的替代方法

c++ - For 循环条件 (cpp)

c - 对 C 标准输出的更多控制

c - 我的 C 代码有什么问题? (大数的主要因素)

c++ - 抽象类类型指针编译成功?