Я пытаюсь связать dll с очень простой программой тестирования, но получаю ошибку, которую опишу в конце поста.
frvt11.h - Интерфейс (просто соответствующий код), который мне нужно реализовать для создания моей dll
namespace FRVT {
class Interface {
public:
static std::shared_ptr<Interface>
getImplementation();
}
}
creation.h - Заголовок моей реализации Inteface
#include "frvt11.h"
namespace FRVT {
class Implementation : public FRVT::Interface {
public:
static std::shared_ptr<Interface>
getImplementation();
}
}
creation.cpp - Моя реализация интерфейса
ОБНОВЛЕНИЕ: переход от реализации :: getImplementation к Interface :: getImplementation
#include "implementation.h"
using namespace FRVT;
std::shared_ptr<Interface>
Interface::getImplementation() {
std::cout<<"getImplementation";
return std::make_shared<Implementation>();
}
main.cpp
ОБНОВЛЕНИЕ: Явно указывает пространство имен Интерфейс ::
#include "frvt11.h"
using namespace FRVT;
int main(){
auto obj = Interface::getImplementation();
return 0;
}
директивы компиляции
ОБНОВЛЕНИЕ: включает каталог -L / dll, где находятся все .h, .cpp и dll
g++ -std=c++11 -c -Wall -Werror -m64 -fPIC implementation.cpp
g++ -std=c++11 -shared -m64 -o libimplementation.so implementation.cpp
g++ -std=c++11 -Wall -m64 -o main main.cpp -L/dll-directory -limplementation
ошибка
ОБНОВЛЕНИЕ : Первоначальная проблема решена
main.cpp: In function 'int main()':
main.cpp:6:34: error: 'getImplementation' was not declared in this scope
auto obj = getImplementation();
Как решить эту ошибку? Я ожидал, что компоновщик сделает "магию", чтобы сказать main.cpp, что реализация упомянутой функции будет в dll. Что я делаю не так?