Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387

Ошибки сборки DLL

13.11.2015, 12:14. Показов 1032. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу написать DLL.

Написал данный код, который под linux собирается без проблем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <string>
 
#ifdef __WIN32__
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
 
class i_plugin {
    public:
        i_plugin();
        virtual ~i_plugin();
        virtual std::string getPluginName();
        virtual std::string getVersion();
        virtual std::string getDescription();
}; 
 
class  plugin_test : public i_plugin{
    public:
        plugin_test(){}
        ~plugin_test(){}
 
        std::string getPluginName(){
            return "test";
        }
        std::string getVersion(){
        return "1.0.0";
        }
        std::string getDescription(){
            return "test plugins";
        }
    
};
 
extern "C" EXPORT i_plugin* create() {
    return new plugin_test;
}
Но под mingw32 имею проблемы сборки.

C:\...\Temp\ccTF8mYm.o:main.cpp.text$_ ZN11plugin_testC1Ev[__ZN11plugin_testC1Ev]+0xf): undefi
ned reference to `i_plugin::i_plugin()'
C:\...\Temp\ccTF8mYm.o:main.cpp.text$_ ZN11plugin_testD1Ev[__ZN11plugin_testD1Ev]+0x18): undef
ined reference to `i_plugin::~i_plugin()'
c:/MinGW/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/bin/ld.exe: C:\..\
Temp\ccTF8mYm.o: bad reloc address 0x18 in section `.text$_ZN11plugin_testD1Ev[__ZN11plugin_testD1Ev]'
collect2.exe: error: ld returned 1 exit status
Что не так в коде ?

Добавлено через 10 минут
Уточню, что class i_plugin я специально засунул в один файл, чтобы было проще показать на форуме. Я знаю, что эту dll я не смогу загрузить, т.к. нет заголовка от i_plugin.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2015, 12:14
Ответы с готовыми решениями:

Ошибки сборки VS++2008
Уважаемые специалисты. Пробую выполнить пример вот из этой статьи http://www.kernelchip.ru/pcports/PS021.php #include...

В чем отличие сборки exe и dll файлов
Извините если пишу не по тематике, подумал, что здесь это более актуально, чем в других темах на форуме. В общем вопрос аналогичен названию...

Отладка dll - сборки
Приветствую. Есть необходимость отладить библиотеку классов .NET. Прблема состоит в том, что проект приложения которое использует эту...

10
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
13.11.2015, 12:16
Строки 11,12
Цитата Сообщение от admsasha Посмотреть сообщение
i_plugin();
virtual ~i_plugin();
Где описание (код) этих методов?
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
13.11.2015, 12:23  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Где описание (код) этих методов?
Нету. Это просто интерфейс описывающий необходимые методы для всех, кто от него будет наследоваться.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
13.11.2015, 12:37
Тогда не объявляйте их. А если объявили, то обязаны реализовать!
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
13.11.2015, 12:56  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
Тогда не объявляйте их. А если объявили, то обязаны реализовать!
Наверное не удачный пример.
Как я делал под linux.
Создавал интерфейс для работы с основной программой.
i_plugin.h
C++
1
2
3
4
5
6
7
8
class i_plugin {
    public:
        i_plugin();
        virtual ~i_plugin();
        virtual std::string getPluginName();
        virtual std::string getVersion();
        virtual std::string getDescription();
};
Саму реализацию i_plugin.cpp скомпилировал вместе с программкой которая вызывала библиотеки.

Но во всех библиотеках я наследовался от i_plugin.h и собирал .so без линковки с i_plugin.cpp. Библиотека ничего о реализации предложенных методов не знала. Всё прекрасно работало. Но вот под windows затык.

Причем если не делать экспорта, то сборка успешно завершается и не требует никаких реализаций.

Добавлено через 8 минут
P.S. получается как бы реализация плагинов.
0
 Аватар для Barrent
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
13.11.2015, 12:57
Цитата Сообщение от admsasha Посмотреть сообщение
Нету. Это просто интерфейс описывающий необходимые методы для всех, кто от него будет наследоваться.
так вроде ж в таком случае нужно использовать чисто виртуальные функции.
1
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
14.11.2015, 18:50  [ТС]
Barrent, виртуальный конструктор ?

Ну я для пробы, конечно, проверил. Мало ли.
error: constructors cannot be declared virtual [-fpermissive]
virtual i_plugin();
^
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
14.11.2015, 18:54
Те сказали волшебное слово "Чисто виртуальные функции"! Ты не в курсах, что это такое?
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
14.11.2015, 19:17
Можно из dll экспортить классы, но такая библиотека будет работать в пределах одного компилятора.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//MyDll.h
#ifdef MYDLL_API
#define MYDLL_EXPORT __declspec(dllexport)
#else
#define MYDLL_EXPORT __declspec(dllimport)
#endif
 
class MYDLL_EXPORT MyClass
{
public:
    MyClass();
    ~MyClass();
    void MyMethod();
    //и так далее
};
 
//MyDll.cpp
#define MYDLL_API   //при компиляции библиотеки отмеченные макросом MYDLL_EXPORT класса и функции будут экспортированы
#include "MyDll.h"
 
MyClass::MyClass() {...}
MyClass::~MyClass() {...}
void MyClass::MyMethod() {...}
//и так далее
 
//где-то в другом "проекте"
#include "MyDll.h"
 
int main()
{
    MyClass my_object;
    my_object.MyMethod();
}
Добавлено через 5 минут
ps: первая ссылка в гугле по запросу "mingw32 dll"
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
14.11.2015, 19:20
admsasha, https://www.cyberforum.ru/post8274323.html
Про std::string в таких интерфейсах, кстати, можешь забыть.
Это жить не будет, в общем случае.
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
16.11.2015, 04:42  [ТС]
Цитата Сообщение от Barrent Посмотреть сообщение
так вроде ж в таком случае нужно использовать чисто виртуальные функции.
Да, это помогло. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2015, 04:42
Помогаю со студенческими работами здесь

ISDone.dll,Unarc.dll вернул код ошибки 7
Всем привет,с наступающим НГ)такая проблема,приобрёл оперативку на 2гб,до этого стояло 3гб,ну обрадовался,вынул 1гб,вставил приобретённую...

Ошибки, связанные с файлами MSVCR100.dll и MSVCR71.dll
Всем привет у меня проблема на компе вот файл MSVCR100;MSVCR71.dll выдает ошибки. Я полазил в google скачал просто сам файл то-есть(dll) и...

Динамическая загрузка DLL, сборки и домены
Сделал по этой статье http://habrahabr.ru/post/247615/ приложение которое все необходимые для своей работы ДЛЛ содержит внутри себя как...

Glew ошибки сборки
код из примера: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;glew.h&gt; #include &lt;glfw3.h&gt; GLFWwindow* window; ...

Проверка сборки на ошибки
Есть решение с несколькими десятками проектов. Они ссылаются друг на друга, но перекрёстных ссылок нет. В решении есть unsafe код в одном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru