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

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

13.11.2015, 12:14. Показов 1016. Ответов 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
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
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
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
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,531
Записей в блоге: 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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru