Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > экспорт и импорт функций в lib файлах


Автор: cyberTransMutant 18.5.2008, 12:40
обьясните пожалуйста, как экспортировать и импортировать либы в разных средах,
на данный момент знаю что есть 2 формата либ coff и omf,
знаю как импортировать функции из либ в vc2005 (нужен coff) и в билдер (omf),
вот например простой пример импорта и использования функции из либы:
Код

#include <windows.h>
#include <iostream>

#pragma comment (lib, "testLIB_coff.lib") //для VC или testLIB_omf.lib для билдера
extern "C"
{
  int _stdcall summa2x(int i1,int i2);
}

int main()
{
  int x;
  x=summa2x(15,4) ;
  std::cout << x << std::endl;
  system("pause");
  return 0;
}

(если захотите проверить testLIB_omf.lib и testLIB_coff.lib есть в приложении)
MinGW кажется использует omf формат но с импортом либ в нем у меня проблема 
Код

warning: ignoring #pragma comment

как отключить в MinGW этот "ignoring"? 
как экспортировать функции? 
гдето слышал что можно экспортировать и классы? или это тока в длл?


Автор: cyberTransMutant 18.5.2008, 13:47
если кто знает скажите как экспортировать функцию в либ файл в знакомой для вас среде,
нужен просто напросто пример как это все оформляется в одном месте, далее будет понятно что нужно делать/искать в других средах

Автор: bsa 18.5.2008, 17:10
В билдере:
Код
__export int myFunc(int)
{
}

Автор: palva 19.5.2008, 20:41
> обьясните пожалуйста, как экспортировать и импортировать либы в разных средах,

Либы - это что такое? Экспортировать можно имена из динамически загружаемых библиотек dll
То что вы написали это не экспорт. Это подключение к программе библиотеки с расширением lib.

Автор: cyberTransMutant 19.5.2008, 22:17
Цитата(palva @  19.5.2008,  20:41 Найти цитируемый пост)
То что вы написали это не экспорт. Это подключение к программе библиотеки с расширением lib. 

пусть так, проблема в том что незнаю как это провернуть в MinGW,

bsa спасибо, пока не успел толком разобраться,
но экспорт немнога не так пишется:
Код

int __export myFunc(int)// не __export int myFunc(int)
{
}


так удалось экспортировать небольшую функцию:
Код

int __export __stdcall summaBuilder(int x, int y)
{
  return x+y;
}

и импортировать её же:
Код

#pragma comment (lib, "export_lib.lib")
int __import __stdcall summaBuilder(int x, int y);

правда это вовсе не extern "C", 
и непонятно что там билдер творит в либах и почему он в них полные пути пишет, 
провеить в VC++ пока немогу, скачал непонятную программу Omf2Coff.exe на неправильном русском
и сейчас немного нет времени со всем этим бороться, 

если кто знает подскажите как в MinGW подключить библиотеки с расширением lib

Автор: bsa 20.5.2008, 11:47
cyberTransMutant
Код
> mingw32-gcc -Lc:\mingw32\mylibs\lib -Ic:\mingw32\mylibs\include -lmylib -o myprog myprog.cpp

можно и так:
Код
> mingw32-gcc -Ic:\mingw32\mylibs\include -lc:\mingw32\mylibs\lib\mylib.lib -o myprog myprog.cpp

Автор: Rififi 20.5.2008, 12:24
cyberTransMutant, 
для подключения в проекту lib-файла никакие директивы __export/__import не нужны (если это настоящий lib, а не библиотека импорта сделанная из dll)

Автор: cyberTransMutant 22.5.2008, 09:14
спасиб bsa, ток вариант коммандной строки не совсем то,  
просто если надо будет включать и выключать некоторое количество либ файлов в проект это немного неудобно,
а нельзя также что то в командной строке прописать чтоб он не игнорировал прагму?

Автор: bsa 22.5.2008, 11:56
Цитата(cyberTransMutant @ 22.5.2008,  09:14)
спасиб bsa, ток вариант коммандной строки не совсем то,  
просто если надо будет включать и выключать некоторое количество либ файлов в проект это немного неудобно,
а нельзя также что то в командной строке прописать чтоб он не игнорировал прагму?

Я знаю, что неудобно. Но mingw пользоваться без IDE невозможно не из командной строки, как и другим компилятором. Так как ты не указал, что у тебя за IDE, то я взял на себя смелость предположить, что компилируешь из консоли.
Можно в командной строке прописать ключик, что не будут выводиться предупреждения по поводу игнорирования прагмы. Так же можно в командной строке изменить имя вызываемого компилятора на тот, который понимает эту прагму. Например, bcc32.
Так же можно написать простенький Makefile, который будет обрабатываться командой mingw32-make.exe и выполнять инструкции, указанные в нем.

Автор: cyberTransMutant 27.5.2008, 09:40
>Можно в командной строке прописать ключик, что не будут выводиться предупреждения по поводу игнорирования прагмы. 
не будут выводиться предупреждения - эт бессмысленно ведь прагма всеравно учитываться не будет,

>Так же можно в командной строке изменить имя вызываемого компилятора на тот, который понимает эту прагму. 
нет нужен именно minGW, желательно тот который идет вместе с MinGWDevstudio2.05:
- gcc 3.3.1 (20030804-1) (C/C++ only)
- binutils 2.14.90 (20030807-1)
- mingw runtime 3.2
- w32api 2.4
- gdb 6.0 (20031011)
- gnu make 3.80.0-3
- some useful utilities (flex, bison ...)

и,bsa незнаете планируют ли в последних версиях minGW включить поддержку прагм?

Автор: bsa 27.5.2008, 10:26
cyberTransMutant, боюсь ты не понял юмора. #pragma поддерживается всеми компиляторами. Но стандарта на нее нет, поэтому у каждого компилятора она работает посвоему.
О вообще забудь о прагме - это непереносимое решение. Подключай библиотеки через настройки проекта.

Автор: cyberTransMutant 28.5.2008, 22:52
Спасибо bsa это кокраз то что хотел услышать!
тема закрыта!

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