【问题标题】:Linking libpng with Borland C++将 libpng 与 Borland C++ 链接
【发布时间】:2011-05-02 23:57:18
【问题描述】:

我在 Mac OS X 上使用 OpenGL 并动态链接 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 获取?

【问题讨论】:

    标签: c++ windows libpng borland-c++


    【解决方案1】:

    MinGW 编译器可能比 Borland 更好。 Borland 不再得到很好的支持。

    您也可以下载 DevC++ 并查看其插件机制中是否有 libpng 包。 DevC++ 是一个使用 MinGW C/C++ 编译器的 IDE。

    也就是说,如果您觉得必须使用密件抄送,您要么必须 a) 使用 Borland 构建 libpng。如果您要使用 borland,这是最好的解决方案。 b) 我认为使用 Impdef 从 libpng.dll 创建一个导入库。您会在 borland bin 目录中找到 impdef.exe 或 imp(something).exe。 请注意,某些库无法与 impdef 一起使用,因为链接到 dll 的静态代码会导致它在没有正确运行时的情况下失败。

    【讨论】:

    • 好的,让我们看看这是否可行,否则我将使用 MinGW。谢谢!
    • 如果你要投反对票,至少有礼貌地说出原因。
    • @Mayerz:我记得它是我在 Borland 时代的 impdef.exe,但是......我老了,我的记忆可能是错误的。 :)
    • 哈哈好吧!别担心,我还年轻,都一样
    【解决方案2】:

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

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

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

    【讨论】:

    • 哈哈谢谢,我真的不知道这些东西的大部分。但是 -tW 实际上使它成为我的 Windows gui 程序。当我用相同的命令行编译其他东西时,它们只是变成带有 .exe 扩展名的 cpp 文件的名称。我想我会继续尝试用 borland 构建 libpng,非常感谢你注意到 -lpng 的事情。
    • 关于-tW,我误解了选项文档中“指定目标可执行文件”的含义。 (我现在已经修复了帖子中的错误链接,但这里又是docwiki.embarcadero.com/RADStudio/en/…)。
    【解决方案3】:

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

    COFF2OMF.EXE, the Import Library Conversion Tool

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2012-09-19
      • 2011-01-24
      • 2011-02-19
      • 2012-02-19
      • 2012-08-30
      • 2015-01-09
      • 1970-01-01
      • 2023-01-14
      相关资源
      最近更新 更多