Связывание libpng с Borland C ++ - PullRequest
0 голосов
/ 31 октября 2010

Я создал программу для Mac OS X, используя OpenGL и динамически связывая libpng .Я сейчас пытаюсь перенести его на Windows.Всякий раз, когда я пытаюсь скомпилировать и связать свою портированную программу в Borland, она выдает мне эту ошибку и еще около 10 одинаковых, но с другой '_png_create_read_struct':

Ошибка: нерешена внешняя _png_create_read_struct 'ссылка из C: \ PROGRAMMING \ PNGTEST.OBJ

Я предполагаю, что это потому, что я неправильно настроил libpng с Borland C ++ 5.5.1 для Win32 .Я поместил png.h и pngconf.h в папку include в C: \ Borland \ BCC55 \ Include, и я поместил libpng12.dll.a, libpng13.a, libpng13.dll.a, libpng.a, libpng.dll.a, libpng12.def, libpng.def, libpng12.la и libpng.la в C: \ Borland \ BCC55 \ Lib (вероятно, они не нужны всем, но как нуб я не знаю, какие из нихнужны и не нужны).

Нужно ли мне туда помещать файл libpng.obj?И если так, как бы я сделал / получить один?Я попытался использовать makefile.bc32 для установки libpng, но это дает мне пропущенную ошибку разделителя.

Вот мои параметры командной строки:

bcc32 -tW pngtest.cpp -lpng

Я включил png.h вмой кодЧто я делаю не так или есть еще лучший способ загрузки изображений с альфа-версией, для которых не требуется libpng, или даже лучший компилятор для Windows?

Ответы [ 3 ]

1 голос
/ 31 октября 2010

Вам, вероятно, лучше с компилятором MinGW, чем с Borland. Borland больше не поддерживается.

Вы также можете скачать DevC ++ и посмотреть, есть ли у него пакет libpng в механизме добавления. DevC ++ - это среда разработки, в которой используется компилятор MinGW C / C ++.

Тем не менее, если вы чувствуете, что должны использовать BCC, вам придется либо а) Сборка libpng с Borland. Это лучшее решение, если вы собираетесь использовать Borland. б) Используйте, я думаю, Impdef для создания библиотеки импорта из libpng.dll. Вы найдете impdef.exe или imp (что-то) .exe в каталоге borland bin. Обратите внимание, что некоторые библиотеки не будут работать с impdef, так как есть статический код, связанный с dll, который приводит к сбою без надлежащего времени выполнения.

0 голосов
/ 03 ноября 2010

Возможно, вам следует просто использовать coff2omf для конвертации библиотеки. Файлы DLL почти наверняка имеют формат «Microsoft» COFF .

См. COFF2OMF.EXE, инструмент преобразования библиотеки импорта .

0 голосов
/ 31 октября 2010

Прежде всего, я бы не стал " загрязнен " установкой BC55 сторонними библиотеками;это значительно затруднит перемещение проекта в другие среды сборки.Было бы лучше поместить их в папку в вашем проекте.

Во-вторых, знаете ли вы , что библиотека экспорта, которую вы пытаетесь связать, создана для BC55?Расширение .a предлагает библиотеку GNU (библиотеки Borland обычно используют расширение .lib), и в этом случае она не будет связываться с BC55, который использует другой формат объектных файлов.Если это так, вам нужно будет перестроить библиотеку так, как вы пытались это сделать, поэтому я предлагаю вам действительно задать вопрос о проблеме, с которой вы столкнулись при этом.Интересно, написан ли make-файл для Borland make или GNU make, поскольку они имеют разный синтаксис?

Параметр командной строки -lpng может быть верным для GCC (где он будет связывать libpng.a), нобессмысленно для BCC.Опция -l просто передает текст, который следует за компоновщиком.Командная строка компоновщика требует передачи полного имени, а если расширение не указано, неявно добавляется .lib.

...