Russian Qt Forum

Программирование => Общий => Тема начата: MoPDoBoPoT от Июнь 05, 2010, 21:59



Название: Подружить Visual Prolog 7.1 и MinGW 3.4.5
Отправлено: MoPDoBoPoT от Июнь 05, 2010, 21:59
Всем привет.
Пишу программу на Visual Prolog 7.1 Personal Edition (PE), из которой надо обращаться к БД, но данный фунционал возможен только в Commercial Edition. Поэтому я решил написать свою dll-ку (на C++/Qt), в которую поместил всю необходимую работу с БД. Но слинковать полученную библиотеку с prolog-программой мне не удается, линкер выдает лаконичное "Interior fatal error: COFF reloc". Подгрузить dll явно тоже нельзя - ограничение PE...
Все имеющиеся примеры работы с dll (а их не много) либо с ипользование Visual Basic, либо Visual Studio (есть на руках 1 пример, и он, собака, работает).

Из библиотеки экспортируется лишь одна единственная функция, которая возвращает int. Была помеченная как extern "C".
Бибиотека 100% рабочая, так как я ее пробовал линковать с C++ проектом.

Подразумеваю, что загвоздка в некоторых различиях библиотечных файлов, создаваемых VS и GCC. Хотя:
Цитата: Visual Prolog Help
The PDC Link Editor accepts the following types of input files:

-Object files and libraries in OMF format (32-bits, made by Borland compilers). Number of files is not limited.
-Object files in the Common Object File Format (COFF) (made, for example, by Microsoft (C) 32-bits compilers). Number of files is not limited.
-Linker can link mixed object files of OMF and COFF formats (with certain limitations on call rules) producing valid executable files.
-Libraries in the Microsoft library format. Number of files is not limited.
-Libraries in the archive format. Number of files is not limited.
-Standard Windows 32-bits resource files. Number of resource files is not limited.
-Definition files (.DEF). Number of DEF files is not limited.

Вопрос: каким образом можно побороть это?
Может какими-то ключами компилятора/линкера gcc? Или как-то перегнать имеющийся библиотечный файл, собранный MinGW, в формат VS (знаю что есть обратный способ: .lib -> .a)
P.S. перелезать на студию не очень хочется.


Название: Re: Подружить Visual Prolog 7.1 и MinGW 3.4.5
Отправлено: MoPDoBoPoT от Июнь 05, 2010, 22:04
Кстати, чисто случайным образом, когда эксперементировал с dll, созданной в прологе, загрузил свою  dll (С++). Линковка была произведена с "прологовской" библиотекой, а при запуске программы, рядом с .exe оказалась моя dll.
Но я этому криво*опскому способу не доверяю, да и не кашерно.


Название: Re: Подружить Visual Prolog 7.1 и MinGW 3.4.5
Отправлено: MoPDoBoPoT от Июнь 05, 2010, 23:16
Всем спасибо за внимание, вопрос снят  :)
"Подружить" Visual Prolog и MinGW не удалось, то есть слинковать exe с библиотекой, но подцепить "нормальным" (не кривож...) способом удалось. В ViP'е есть такая возможность, как "неявная динамическая" подгрузка (не нужна линковка с библиотекой, но и не надо самому явно загружать dll, это сделает за нас ViP, при первом же вызове предиката, расположенного в данной dll). В общем время было потрачено из-за двух дополнительных слов...
Вместо "resolve predicateName  externally"  в имплементации интерфейса, надо было написать "resolve predicateName  externally from "myDllName.dll"".

P.S. после Qt-шной доки сложно изучать иную