Связывание libpng с Borland C++

Я сделал программу на 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 ответа

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

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

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

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

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

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

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

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

Другие вопросы по тегам