我有一个用 C++ 编写的库(.so)。如果我这样做,nm mylib.so
我会得到00000000000029a0 T _ZN4Bits7fromMemEPhl
(除其他外)。
另一方面,我有一个用 C 编写的应用程序,它加载了一些用 C++ 编写的插件(dlopen、dlsym 等)。
如果我尝试从我的 c++ 插件中使用我的 lib,我会得到undefined symbol: _ZN4Bits7fromMemEPhl
. 为什么?
编辑:
这就是我编译插件的方式:
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CXX) $^ -o $@ -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
$(CXX) -c $< -o $@ -g -Wall -std=c++11 -pedantic -lcpp-bitstring -fPIC -I.,-rpath=$(LIBS_DIR)/cpp-bitstring
这就是我编译我的主应用程序的方式:
$(TARGET): $(TARGET).o
$(CC) -o $@ $^ -g -Wall -std=gnu99 -ldl -lcrypto -Wl,--export-dynamic
编辑:
问题很清楚。出于某种原因,我的库(cpp-bitstring)没有链接到我的插件。我缺少的代码在哪里?