0

我使用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 for 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 获取?

4

3 回答 3

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 的静态代码会导致它在没有正确运行时的情况下失败。

于 2010-10-31T07:38:31.520 回答
0

您可能应该只使用 coff2omf 来转换库。DLL 文件几乎可以肯定是“Microsoft” COFF格式。

请参阅COFF2OMF.EXE,导入库转换工具

于 2010-11-03T15:18:35.007 回答
0

首先,我不会用第三方库“污染”BC55 安装;这将使将项目迁移到其他构建环境变得更加困难。将它们放在项目中的文件夹中会更好。

其次,您知道您尝试链接的导出库是为 BC55 构建的吗?.a 扩展名表示 GNU 库(Borland 库通常使用 .lib 扩展名),在这种情况下,它不会与使用不同目标文件格式的 BC55 链接。如果是这种情况,您将需要按照您尝试的方式重建库,所以我建议您真的应该问一个关于您在这样做时遇到的问题的问题。我想知道 makefile 是为 Borland make 还是 GNU make 编写的,因为它们有不同的语法?

命令行选项-lpng对于 GCC 可能是正确的(它将链接 libpng.a),但对 BCC 没有意义。该-l 选项仅将后面的文本传递给链接器。链接器命令行,要求传递完整的名称,如果没有提供扩展名,则隐式添加 .lib。

于 2010-10-31T07:46:53.527 回答