Скопипастил решение сюда по просьбе
xepДля Винды нужно в каждой библиотеке сделать индивидуальный H-файл и объявить в нём директиву экспорта.
Только одна библиотека и только одна директива. Т.е. нельзя директиву экспорта из одной библиотеки заюзывать в другую. Особенно если другая использует первую.
Если посмотреть исходники Qt
class Q_
CORE_EXPORT QString ... для QtCore4.dll
class Q_
NETWORK_EXPORT QFtp ... для QtNetwork4.dll
Разным модулям - разные директивы экспорта.
Для программистов Windows это и так должно быть понятно. Для тех кто портирует библиотеки с Линукса в Винду это НЕ сразу понятно. Например, я не сразу сообразил, т.к. Линуксу до "лампады" эти директивы.
/*mylibname.h Короткий H-файл для всех исходных модулей библиотеки*/
#ifndef __
MYLIBNAME_H__
#define __
MYLIBNAME_H__
#ifdef Q_OS_WIN
# if defined(
QT_BUILD_MYLIBNAME_LIB )
# define Q_
MYLIBNAME_EXPORT __declspec(dllexport)
# else
# define Q_
MYLIBNAME_EXPORT __declspec(dllimport)
# endif
#else
# define Q_
MYLIBNAME_EXPORT
#endif
#endif // __
MYLIBNAME_H__
/*Классы для библиотеки объявлять так*/
#include "mylibname.h"
class Q_
MYLIBNAME_EXPORT MyClass {...};
/*В файл проекта библиотеки добавить */
win32 {
DEFINES +=
QT_BUILD_MYLIBNAME_LIB}
/*В файл проекта программы, использующей эту библиотеку */
win32 {
DEFINES +=
QT_BUILD_MYLIBNAME_LIB}
НЕ ДОБАВЛЯТЬ