Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> экспорт и импорт функций в lib файлах, VC,MinGW и в Builder'e 
V
    Опции темы
cyberTransMutant
Дата 18.5.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



обьясните пожалуйста, как экспортировать и импортировать либы в разных средах,
на данный момент знаю что есть 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:37

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  testLIB.7z 0,53 Kb
PM MAIL   Вверх
cyberTransMutant
Дата 18.5.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



если кто знает скажите как экспортировать функцию в либ файл в знакомой для вас среде,
нужен просто напросто пример как это все оформляется в одном месте, далее будет понятно что нужно делать/искать в других средах
PM MAIL   Вверх
bsa
Дата 18.5.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



В билдере:
Код
__export int myFunc(int)
{
}

PM   Вверх
palva
Дата 19.5.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.5.2008

Репутация: нет
Всего: нет



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

Либы - это что такое? Экспортировать можно имена из динамически загружаемых библиотек dll
То что вы написали это не экспорт. Это подключение к программе библиотеки с расширением lib.
PM MAIL   Вверх
cyberTransMutant
Дата 19.5.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



Цитата(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

PM MAIL   Вверх
bsa
Дата 20.5.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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

PM   Вверх
Rififi
Дата 20.5.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



cyberTransMutant
для подключения в проекту lib-файла никакие директивы __export/__import не нужны (если это настоящий lib, а не библиотека импорта сделанная из dll)
PM MAIL   Вверх
cyberTransMutant
Дата 22.5.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
bsa
Дата 22.5.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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

Я знаю, что неудобно. Но mingw пользоваться без IDE невозможно не из командной строки, как и другим компилятором. Так как ты не указал, что у тебя за IDE, то я взял на себя смелость предположить, что компилируешь из консоли.
Можно в командной строке прописать ключик, что не будут выводиться предупреждения по поводу игнорирования прагмы. Так же можно в командной строке изменить имя вызываемого компилятора на тот, который понимает эту прагму. Например, bcc32.
Так же можно написать простенький Makefile, который будет обрабатываться командой mingw32-make.exe и выполнять инструкции, указанные в нем.
PM   Вверх
cyberTransMutant
Дата 27.5.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



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

>Так же можно в командной строке изменить имя вызываемого компилятора на тот, который понимает эту прагму. 
нет нужен именно 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 включить поддержку прагм?
PM MAIL   Вверх
bsa
Дата 27.5.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



cyberTransMutant, боюсь ты не понял юмора. #pragma поддерживается всеми компиляторами. Но стандарта на нее нет, поэтому у каждого компилятора она работает посвоему.
О вообще забудь о прагме - это непереносимое решение. Подключай библиотеки через настройки проекта.
PM   Вверх
cyberTransMutant
Дата 28.5.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 14.5.2008

Репутация: нет
Всего: нет



Спасибо bsa это кокраз то что хотел услышать!
тема закрыта!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.