Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: компиляция библиотек посредством msvc2008
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt инструментарий
Гость_hemmul_*
Создаю проект, целью которого ставлю компиляцию 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();
        ..................................
   }
  ...............
balbes
Скорее всего проблема в том, что во время компиляции с помощью MSVC2008 ты пытаешься зацепить либы скомпилированные MinGW вот тебе и ругань.
Iron Bug
как линкуешь свою библиотеку к основному модулю?
объявлены ли внешние функции как __declspec(dllexport)? gcc по умолчанию экспортирует все функции, а msvc нужно к этому принуждать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.