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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как из файлов .c и .def получить (udf).dll, для Firebirda, а также .so для *nix-ов 
:(
    Опции темы
Bose
Дата 20.3.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Дано:
есть исходник udf-ки для Firebird на Си
есть .def файл в котором перечислены экспортируемые функции.
есть Windows компьютер на котором установлены cygwin и mingw

Необходимо:
Скомпилировать этот исходник в .dll-ку, (UDF для Firebird-a)
Скомпилировать этот исходник в .so, (UDF для Firebird-a, в версии для *nix)

Известно:
Что этот исходник рабочий.
Что из него когда-то делали и so и dll. 

Помогите пожалуйста разобраться с последовательностью действий. С gcc столкнулся впервые.

Пробовал собрать по примеру из хелпа к dlltool:
       gcc -c dll.c
       dlltool -e exports.o -l dll.lib dll.o
       gcc dll.o exports.o -o dll.dll

Процесс падает на последней строчке с сообщением о том, что exports.o не найден.


PM MAIL WWW Skype   Вверх
Bose
Дата 20.3.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



И кстати, если первую строку выполнить так(без ключа -с):
gcc dll.c

то gcc выводит ошибку:

fwudf.o:fwudf.c:(.text+0xbf2): undefined reference to `_isc_decode_date' (таких строчек несколько)
fwudf.o:fwudf.c:(.text+0x153f): more undefined references to `_isc_decode_date' follow
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0xab): undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status


PM MAIL WWW Skype   Вверх
Bose
Дата 20.3.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(Bose @  20.3.2009,  17:59 Найти цитируемый пост)
Пробовал собрать по примеру из хелпа к dlltool:
       gcc -c dll.c
       dlltool -e exports.o -l dll.lib dll.o
       gcc dll.o exports.o -o dll.dll

Процесс падает на последней команде с сообщением о том, что exports.o не найден.

Эта проблема проявляется при компиляции с помощью MinGW. exports.o почему-то не создаётся.

В CygWin же вторая команда проходит, нормально. exports.o вроде создаётся. 
Процесс тормозится на третьей команде
       gcc dll.o exports.o -o dll.dll
с сообщением об
Код

undefined reference to `isc_decode_date' (таких строчек несколько)


isc_decode_date упоминается в файле ibase.h. 

А dll.c выглядит примерно так:
Код

#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ibase.h>
#include <ib_util.h>
#include <time.h>

ISC_QUAD* fn_incdate(ISC_QUAD* d1, int* days, int* months, int* years)
{
    struct tm tm1;
    ISC_QUAD* res= malloc( sizeof(ISC_QUAD) );
    isc_decode_date(d1, &tm1);
    incdate( &tm1, *days, *months, *years );
    isc_encode_date( &tm1, res );
    return res;
}


Добавлено через 4 минуты и 28 секунд
Я так подозреваю, что для того, чтобы всё собралось, нужно либо что-то ещё прилинковать, либо указать какой-то ключ в командной строке, но не знаю что именно. Хееелп!
PM MAIL WWW Skype   Вверх
Bose
Дата 20.3.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Кстати, использование MinGW или CygWin не является требованием. Хотя конечно, мне не очень хочется устанавливать себе Visual Studio.

PM MAIL WWW Skype   Вверх
Bose
Дата 22.3.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



DLL получилось собрать, установив lcc, и указав в настройках linker-a дополнительный файл fbclient_ms.lib. Работоспособность пока не тестировал.

Меня терзают смутные сомнения, что можно так вот запросто прилинковать либу от Ms C к коду скомпилированному в lcc, и всё после этого будет работать стабильно.

Господа гуру, покомментируйте пожалуйста эту ветку. А то я что-то делаю, но сам толком не понимаю что это значит. Спасибо.
PM MAIL WWW Skype   Вверх
Bose
Дата 24.3.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



up
PM MAIL WWW Skype   Вверх
zim22
Дата 24.3.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Bose, smile
вы не там где надо тему создали.
http://forum.vingrad.ru/forum/topic-203039...ry/0.html#entry


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


Эксперт
****


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

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



Bose, вообще-то, сишные либы можно линковать к любым проектам под той же архитектурой. Это особенность Си. В Си++ этого нет - необходимо, чтобы компиляторы совпадали (даже версии).
А то, что у тебя скомпилировалось с помощью icc не удивительно - ты же подсунул недостающую либу. Если бы ты тоже самое под mingw сделал, то тоже бы не было ошибок.

Вот только данная тема отношения к си не имеет.
PM   Вверх
Bose
Дата 24.3.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(zim22 @  24.3.2009,  12:57 Найти цитируемый пост)
Bose, smile
вы не там где надо тему создали.
http://forum.vingrad.ru/forum/topic-203039...ry/0.html#entry 

Я смотрел тот топик - там не используются функции isc_decode_date, и соответственно не возникает нужды линковаться к fbclient_xx.lib.

Цитата(bsa @  24.3.2009,  13:51 Найти цитируемый пост)
Вот только данная тема отношения к си не имеет. 

Насчёт раздела, на мой взгляд, вопрос в большей степени относится к Си(не к языку, а к инструментарию), чем к Firebird-у.


Цитата(bsa @  24.3.2009,  13:51 Найти цитируемый пост)
Bose, вообще-то, сишные либы можно линковать к любым проектам под той же архитектурой. Это особенность Си. В Си++ этого нет - необходимо, чтобы компиляторы совпадали (даже версии).
А то, что у тебя скомпилировалось с помощью icc не удивительно - ты же подсунул недостающую либу. Если бы ты тоже самое под mingw сделал, то тоже бы не было ошибок.

А что такое архитектура? OS? битность(32/64)? тип процессора(Intel/Celeron)?

Добавлено через 45 секунд
а в остальном, bsa, спасибо.
PM MAIL WWW Skype   Вверх
Bose
Дата 26.3.2009, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



не тема, а футбольный мячик какой-то.  smile 

Решение под винду найдено. Ответили тут:

http://www.sql.ru/forum/actualthread.aspx?tid=649279#6970952
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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