使用C语言的C ++共享库

时间:2015-01-10 01:21:43

标签: c++ c gcc shared-libraries

我有一个C库,我在我的C应用程序中使用dlopendlsym。 一切正常,但我将C库重写为C ++,现在我的主应用程序停止了使用库。

它找不到符号(函数),即使代码完全相同,只是我改变了我的编译方法。

这就是我之前获得lib的方式:

$(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代码中使用它?

1 个答案:

答案 0 :(得分:7)

那是因为名称错误,函数名在c ++中被破坏以提供函数重载,如果需要在c中使用这些函数,则用extern "C"声明函数,这样编译器就不会破坏名称功能

所以为函数void function() {}

添加这个原型
extern "C" void function();

会这样做。我假设您可以弄清楚如何修复其他功能。