Связывание 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, инструмент преобразования библиотеки импорта.