Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: hemmul от Июль 03, 2012, 13:32



Название: компиляция библиотек msvc2008
Отправлено: hemmul от Июль 03, 2012, 13:32
Создаю проект, целью которого ставлю компиляцию dll, компилирую с помощью MinGW, все нормально работает.
Собираю Qt4.8.2 с помощью MSVC2008, после чего компилирую им сначала тестовую утилитку для  моей dll, проект не компилируется, дает ошибку:
" блабла\video_observation.dll:-1: ошибка: LNK1107: недопустимый или поврежденный файл: не удается прочитать по 0x2D0"
Теперь собираю тестовую утилитку с помощью MinGV, а библиотеку с помощью MSVC, все собирается, но тестовой утилитке не удается загрузить библиотеку.
Пересобираю тестовую утилитку с помощью MSVC - ошибка компиляции проекта та же.

ВОПРОС ! что такого сделать что бы библиотека собранная из под MSVC работала ?

video_observation.pro
Код:
QT       += core network
QT       -= gui

TARGET = video_observation
TEMPLATE = lib
DEFINES += VideoObservation_LIBRARY
SOURCES +=  extern_func.cpp
HEADERS  += extern_func.h

extern_func.h
Код:
#if defined(VideoObservation_LIBRARY)
#  define VideoObservation  Q_DECL_EXPORT
#else
#  define VideoObservation Q_DECL_IMPORT
#endif

extern "C"  {

VideoObservation int   number_sort_video_observ(void);
VideoObservationT const char * get_name_sort_number(int num);
...................
}

extern_func.cpp
Код:
extern "C"  VideoObservation int   number_sort_video_observ(void)
{
 ...................
}
extern "C"  VideoObservationT const char * get_name_sort_number(int num);
{
 ...................
}


создаю проект для тестирования библиотеки
test.pro
Код:
QT       += core gui network

TARGET = test_video_observation
TEMPLATE = app
SOURCES += main.cpp    

HEADERS  += mainwindow.h video_observation_library.h

video_observation_library.h
Код:
 typedef int (*Tnumber_sort_video_observ)(void);
 typedef char* (*Tget_name_sort_number)(int num);
main.cpp
Код:
   ...............
   QLibrary lib("video_observation");
    if(lib.load())
    {
        Tnumber_sort_video_observ number_sort_video_observ
               = (Tnumber_sort_video_observ)lib.resolve("number_sort_video_observ");
        qDebug() << number_sort_video_observ();
        ..................................
   }
  ...............


Название: Re: компиляция библиотек msvc2008
Отправлено: Bepec от Июль 03, 2012, 13:33
Эммм.. молодец что создаёшь проект.


Название: Re: компиляция библиотек msvc2008
Отправлено: hemmul от Июль 03, 2012, 13:48
шустро отвечаете, еще тему дописать не успел ))


Название: Re: компиляция библиотек msvc2008
Отправлено: xokc от Июль 04, 2012, 11:50
После смены компилятора очистить проект. Похоже MSVC питается слинковаться с объектником от MinGW.


Название: Re: компиляция библиотек msvc2008
Отправлено: hemmul от Июль 04, 2012, 13:12
Чистил, удалял всю папку со сборкой, все бесполезно.