我使用OpenGL在Mac OS X上制作了一个程序并动态链接libpng。我现在正尝试将其移植到Windows。每当我尝试在Borland中编译和链接我的移植程序时,它会给我这个错误,并且大约有10个相同,但是使用不同的'_png_create_read_struct':
错误:C:\ PROGRAMMING \ PNGTEST.OBJ中未解析的外部'_png_create_read_struct'引用
我认为这是因为我没有使用Borland C ++ 5.5.1为Win32正确设置libpng。我把png.h和pngconf.h放到了包含在C:\ Borland \ BCC55 \ Include中的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的alpha图像,甚至更好的编译器来获取Windows?
答案 0 :(得分:1)
使用MinGW编译器可能比Borland更好。 Borland不再受到很好的支持。
你也可以下载DevC ++并查看它的插件机制中是否有libpng包。 DevC ++是一个使用MinGW C / C ++编译器的IDE。
那就是说,如果你觉得你必须使用BCC,你要么必须这样做 a)与Borland一起构建libpng。如果你打算使用borland,这是最好的解决方案。 b)我认为使用Impdef从libpng.dll创建一个导入库。你会在borland bin目录中找到impdef.exe或imp(something).exe。 请注意,某些库不能与impdef一起使用,因为存在链接到dll的静态代码导致它在没有正确运行时的情况下失败。
答案 1 :(得分:0)
首先,我不会在第三方库中安装“污染”BC55;它会使项目移动到其他构建环境变得更加困难。将它们放在项目中的文件夹中会更好。
其次,知道您尝试链接的导出库是为BC55构建的吗? .a扩展名表示GNU库(Borland库通常使用.lib扩展名),在这种情况下,它不会与使用不同目标文件格式的BC55链接。如果是这种情况,您将需要像您尝试的那样重建库,所以我建议您应该问一个关于这样做的问题。我想知道makefile是为Borland make还是GNU make编写的,因为它们有不同的语法?
命令行选项-lpng
对于GCC(它将链接libpng.a)可能是正确的,但对BCC没有意义。 -l
option仅将后面的文本传递给链接器。 linker command line要求传递完整的名称,如果没有提供扩展名,则隐式添加.lib。
答案 2 :(得分:0)
您应该只使用coff2omf来转换库。 DLL文件几乎肯定是“Microsoft”COFF格式。