C++로 작성된 lib (.so)가 있습니다. 내가 nm mylib.so
일 경우 00000000000029a0 T _ZN4Bits7fromMemEPhl
을 얻습니다.C 응용 프로그램에 의해로드 된 C++ 플러그인의 C++ 라이브러리 사용
반면에 C로 작성된 앱이 있는데, C++로 작성된 일부 플러그인을로드합니다 (dlopen, dlsym 등).
내 C++ 플러그인에서 내 lib를 사용하려고하면 undefined symbol: _ZN4Bits7fromMemEPhl
이 표시됩니다. 왜?
편집 :
$(PLUGINS_DIR)/%.so: $(PLUGINS_DIR)/%.o
$(CXX) $^ -o [email protected] -shared
$(PLUGINS_DIR)/%.o: $(PLUGINS_DIR)/%.cpp
$(CXX) -c $< -o [email protected] -g -Wall -std=c++11 -pedantic -lcpp-bitstring -fPIC -I.,-rpath=$(LIBS_DIR)/cpp-bitstring
그리고 이것이 내가 내 주요 응용 프로그램을 컴파일 방법은 다음과 같습니다 :
이 내 플러그인을 컴파일하는 방법이다
$(TARGET): $(TARGET).o
$(CC) -o [email protected] $^ -g -Wall -std=gnu99 -ldl -lcrypto -Wl,--export-dynamic
편집 : 문제
분명하다. 어떤 이유로 내 라이브러리 (cpp-bitstring)가 내 플러그인에 연결되어 있지 않습니다. 누락 된 코드는 어디에 있습니까?
여기
간단한 메이크입니다 올바르게로드 되었습니까? – jxh@jxh 필자는 플러그인 코드에있는로드와 "do_stuff"함수에 간단한 cout을 넣었고, 콘솔에서 그 출력을 보았습니다. 그래서 플러그인의 로딩/실행이 정상적으로 작동한다고 가정합니다. – alexandernst
'정의되지 않은 심볼'메시지는 어느 시점에서 인쇄됩니까? – jxh