![]() |
|
Модераторы: LSD |
![]()
|
|
| AlexeyChe |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
Всем доброго дня
Мучаюсь уже с dll'ками не первый день, ступор в линковке, компиляция кода проходит успешно. Пример кода:
ошибка:
почему не проходит линковка...для меня остается чем-то за гранью познанного, потому что ладно бы ругался на все макросы, которые я здесь использую, ну там на Int32GetDatum например, ему не нравится только Float8 Да, причем стоит закомментировать функцию с float8, оставив только int32 - add_one, то dll работает Бинарники постгрес от 8.4 сборка через Мингв в Dev-cpp, WinXP |
||||
|
|||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: нет Всего: 39 |
Float8GetDatum - функция, которая получается при раскрытии одного из макросов. Макросы успешно раскрываются, потому что описаны в подключаемых .h файлах. А вот реализации функции линковщик не видет. Линкуйте с постгресной библиоткой.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| AlexeyChe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
djamshud, я линковал все основные библиотеки бинарников постгрес
может подключить ещё какую нибудь папку? такую чтоб с float8 да и вообще странно, сомневаюсь что описание Int32GetDatum лежит где нибудь далеко от аналогичного описания float8 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: нет Всего: 39 |
dllwrap.exe --output-def libdll_c_v1.def --implib libdll_c_v1.a dllmain.o -L"C:/Dev-Cpp/lib" -L "c:/pgsql/include" --no-export-all-symbols --add-stdcall-alias -o dll_c_v1.dll
Не видно, чтобы вы линковали программу с постгресной либой. -L"c:/pgsql/include" этим вы сказали, где находятся либы, но не указали, какие именно подключать. PS. с папочкой include вы наверное тоже ошиблись. Скорее всего что-нибудь вроде lib или bin. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| AlexeyChe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
djamshud, Доброго времени суток
Очень похоже на правду то что Вы сказали, только вот проблема не решилась Нашел в документации что Float8GetDatum описан в postgres.lib библиотечке, пытался её линковать, от отчаяния конвертнул postgres.lib -> postgres.dll, проверил Dependency Walkerom наличие сей функции, она как и ожидалось там присутствует, только вот толку ноль. Я, наверное, не правильно линкую библиотеку?
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: нет Всего: 39 |
Допустим:
C:\pgsql\lib - каталог с дллкой postgres.dll. Скомпилировали main.c в main.o Линкуем: gcc -o main main.o -L"c:\pgsql\lib" -lpostrges Должно работать -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| AlexeyChe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 27.11.2009 Репутация: нет Всего: нет |
djamshud, спасибо, заработало
я знал что надо примерно как то так линковать, но как точно так и не понял, теперь ясно =) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PostgreSQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |