使用 C 中的C++共享库
Using C++ shared library from C
我有一个C库,我正在使用我的C应用程序,dlopen
dlsym
。一切正常,但我重写了 C 库以C++,现在我的主应用程序停止使用该库。
它找不到符号(函数),即使代码完全相同,只是我改变了编译方法。
这就是我之前获得库的方式:
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CC) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.c
$(CC) -c $< -o $@ -pedantic -g -Wall -std=gnu99 -fpic -I.
这就是我现在得到它的方式:
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CPP) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
$(CPP) -c $< -o $@ -pedantic -g -Wall -fPIC -I.
我应该如何编译 mmy C++ 库,以便我可以从我的 C 代码中使用它?
这是因为名称重整,函数名称在 c++ 中被破坏以提供函数重载,如果您需要在 C 中使用这些函数,请使用 extern "C"
声明函数,以便编译器不会破坏函数的名称。
因此,为函数添加此原型void function() {}
extern "C" void function();
会这样做。我假设你可以弄清楚如何修复其他功能。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 共享队列的线程安全
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 多个"常量引用"变量可以共享同一个内存吗?
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针