Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Лишние экспортируемые функции в DLL


Автор: RinOSpro 21.11.2011, 10:18
Всем привет! Решил перенести DLL с Borland C++ на Qt, все получилось кроме того, что раньше из DLL я экспортировал 4 функции… а после перекомпиляции на Qt появилась целая туча функции которые мне не нужны.

http://s1.ipicture.ru/uploads/20111121/D6XUXpes.png

Компилировал как в Debug, так и в Release.

Экспортирую так:
Код

extern "C" int LibInit(int algorithm, int sourcetype, char* sourcename)

Как лечить?

Автор: borisbn 21.11.2011, 11:08
Проблема никак не связана ни с Си++, ни с Qt, а связана с компилятором/линковщиком/настройками_IDE.
У меня, например, Qt-шная dll-ка, экспортирующая одну ф-цию, реально только её и экспортирует. Я использую MSVC 2008.
В общем, кури в сторону опций компиляции/линковки

Автор: bsa 21.11.2011, 11:58
RinOSpro, вообще-то, extern "C" - это не экспорт функции. Это лишь сигнал компилятору о том, чтобы он не делал сложное имя функции. А экспорт - это http://msdn.microsoft.com/ru-ru/library/a90k134d(v=vs.90).aspx перед объявлением функции или класса.
По умолчанию, линуксовый компилятор экспортирует все функции и переменные. Чтобы он этого не делал, добавляют специальный ключи (для GCC/mingw: -fvisibility=hidden -fvisibility-inlines-hidden). Так как Qt SDK по умолчанию поставляется с mingw, то компилятор там изначально из unix. Возможно, со всеми вытекающими.

Автор: RinOSpro 21.11.2011, 12:11
Цитата

По умолчанию, линуксовый компилятор экспортирует все функции и переменные. Чтобы он этого не делал, добавляют специальный ключи (для GCC/mingw: -fvisibility=hidden -fvisibility-inlines-hidden).


А где прописывать эти ключи компилятора?

Автор: bsa 21.11.2011, 12:20
в настройках компилятора, на которые ссылался borisbn. почитай документацию.

Автор: RinOSpro 24.11.2011, 12:28
Лишние экспорты сами исчезли когда я перед нужными функциями поставил: extern "C" __declspec(dllexport) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)