| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PostgreSQL > Си функции, dll, проблема линковки |
| Автор: AlexeyChe 27.11.2009, 11:53 | ||||
| Всем доброго дня Мучаюсь уже с dll'ками не первый день, ступор в линковке, компиляция кода проходит успешно. Пример кода:
ошибка:
почему не проходит линковка...для меня остается чем-то за гранью познанного, потому что ладно бы ругался на все макросы, которые я здесь использую, ну там на Int32GetDatum например, ему не нравится только Float8 Да, причем стоит закомментировать функцию с float8, оставив только int32 - add_one, то dll работает Бинарники постгрес от 8.4 сборка через Мингв в Dev-cpp, WinXP |
| Автор: djamshud 27.11.2009, 13:07 |
| Float8GetDatum - функция, которая получается при раскрытии одного из макросов. Макросы успешно раскрываются, потому что описаны в подключаемых .h файлах. А вот реализации функции линковщик не видет. Линкуйте с постгресной библиоткой. |
| Автор: AlexeyChe 27.11.2009, 13:25 | ||
djamshud, я линковал все основные библиотеки бинарников постгрес
может подключить ещё какую нибудь папку? такую чтоб с float8 да и вообще странно, сомневаюсь что описание Int32GetDatum лежит где нибудь далеко от аналогичного описания float8 |
| Автор: djamshud 27.11.2009, 13:51 |
| 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. |
| Автор: AlexeyChe 30.11.2009, 17:38 | ||
| djamshud, Доброго времени суток Очень похоже на правду то что Вы сказали, только вот проблема не решилась Нашел в документации что Float8GetDatum описан в postgres.lib библиотечке, пытался её линковать, от отчаяния конвертнул postgres.lib -> postgres.dll, проверил Dependency Walkerom наличие сей функции, она как и ожидалось там присутствует, только вот толку ноль. Я, наверное, не правильно линкую библиотеку?
|
| Автор: djamshud 30.11.2009, 17:43 |
| Допустим: C:\pgsql\lib - каталог с дллкой postgres.dll. Скомпилировали main.c в main.o Линкуем: gcc -o main main.o -L"c:\pgsql\lib" -lpostrges Должно работать |
| Автор: AlexeyChe 1.12.2009, 15:43 |
| djamshud, спасибо, заработало я знал что надо примерно как то так линковать, но как точно так и не понял, теперь ясно =) |