Undefined reference to *функции из dll*

163
20 августа 2019, 09:40

Я получил несколько .dll файлов с простым фреймворком. И в проекте у меня всего два файла.

1) Хедер, где содержаться все объявления функций из dll. 2) Файл, где я хочу вызвать какие-то из этих функций.

1)

#pragma once
#if defined(FRAMEWORK_PROJECT)
#define FRAMEWORK_API __declspec(dllexport)
#else
#define FRAMEWORK_API __declspec(dllimport)
#endif
Class Sprite;
FRAMEWORK_API Sprite* createSprite(const char* path);
FRAMEWORK_API void drawSprite(Sprite*, int x, int y);
FRAMEWORK_API void getSpriteSize(Sprite* s, int& w, int &h);
FRAMEWORK_API void destroySprite(Sprite* s);
FRAMEWORK_API void drawTestBackground();
FRAMEWORK_API void getScreenSize(int& w, int &h);
FRAMEWORK_API unsigned int getTickCount();
FRAMEWORK_API void showCursor(bool bShow);
enum class FRKey
{
    RIGHT,
    LEFT,
    DOWN,
    UP,
    COUNT
};
enum class FRMouseButton
{
    LEFT,
    MIDDLE,
    RIGHT,
    COUNT
};
class FRAMEWORK_API Framework
{
public:
            virtual void PreInit(int& width, int& height, bool& fullscreen) = 0;
    virtual bool Init() = 0;
    virtual void Close() = 0;
    virtual bool Tick() = 0;
    // param: xrel, yrel: The relative motion in the X/Y direction 
    // param: x, y : coordinate, relative to window
    virtual void onMouseMove(int x, int y, int xrelative, int yrelative) = 0;
    virtual void onMouseButtonClick(FRMouseButton button, bool isReleased) = 0;
    virtual void onKeyPressed(FRKey k) = 0;
    virtual void onKeyReleased(FRKey k) = 0;
    virtual ~Framework() {};
};
FRAMEWORK_API int run(Framework*);

2)

#include "Framework.h"
class MyFramework : public Framework {
public:
    virtual bool Tick()
    {
        drawTestBackground();
        return (false);
    }
};
int main(int argc, char *argv[])
{
    return run(new MyFramework);
}

Но при любом вызове я получаю ошибку undfined reference. Исходников dll у меня нет. Подскажите что не так: ошибка моя, или, возможно, в самых dll?

Я только начал работать на ОС Windows и впервые столкнулся с DLL, поэтому буду благодарен за любые указания на ошибки.

Компилирую так: g++ frame.lib game.cpp

Answer 1

Итак, что нужно делать в таких кейсах:

  1. правильно линковать файлы через флаги -l -L.

  2. проверить или файл не был создан через Visual Stduio. Если да, то файл нужно добавить к проекту в Visual Stduio. Просто через командную строку компилиться не будет.

READ ALSO
Передача массива в функцию. C++

Передача массива в функцию. C++

Насколько я знаю, если вызвать int array[500] например в std::cout << array;, то я получу адрес первого элемента массиваСоотвественно std::cout << *array; выведет...

127
Оптимизация работы с памятью в С++

Оптимизация работы с памятью в С++

решил написать свойobj парсер, и столкнулся с небольшой проблемой

119
Работа заголовочных файлов

Работа заголовочных файлов

Возможно вопрос покажется глупым, но я новичок в работе с С++

103