【发布时间】:2015-01-10 01:21:42
【问题描述】:
我有一个从我的 C 应用程序中使用的 C 库,带有 dlopen 和 dlsym。
一切正常,但我将 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 代码中使用它?
【问题讨论】:
-
基本不行,为什么要把库改成C++
-
您需要在函数声明/定义周围添加
extern "C" { ... }。见:stackoverflow.com/questions/1041866/… -
@Galik 这是做什么的? “外部”包装内的代码仍然是 C++ 吗?
-
所有
extern "C"所做的只是让编译器为函数使用C语言符号名称(C++ 破坏了名称)。你仍然可以使用 C++,除非可能不是函数重载。 -
当您从 C 中使用 C++ 代码时,理想情况下您应该有一个 C++
main以便完成 C++ 特定的初始化。
标签: c++ c gcc shared-libraries