MacOSX下libpng的链接器错误

Posted

技术标签:

【中文标题】MacOSX下libpng的链接器错误【英文标题】:Linker error with libpng under MacOSX 【发布时间】:2012-03-10 05:47:51 【问题描述】:

我正在使用 MacOSX 10.7.2 和 Xcode 4.2.1。我使用端口安装了libpng,我试图在我的应用程序中加载 PNG 图像,但出现链接器错误:

Undefined symbols for architecture x86_64:
  "_png_create_read_struct", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_create_info_struct", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_destroy_read_struct", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_set_longjmp_fn", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_init_io", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_set_sig_bytes", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_read_png", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_get_IHDR", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_get_rowbytes", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
  "_png_get_rows", referenced from:
      loadPngImage(char*, int&, int&, bool&, unsigned char**) in test.o
ld: symbol(s) not found for architecture x86_64

我在我的项目中使用了png.h

#include "/usr/X11/include/png.h"

我知道libpng 基于zlib,因此我在“其他链接器标志”中包含了-lz,但没有任何改变。

关于如何使它工作的任何建议?

【问题讨论】:

粗略猜测:看起来缺少 64 位版本 - 你在 libpng 上尝试过 fileotool 吗? 【参考方案1】:

我通过手动安装libpng解决了:

从official web site下载源码

在终端中,进入下载的文件夹并启动

cp ./scripts/makefile.darwin makefile
make 
sudo make install
make clean

如果它不起作用(在我的情况下)使用 TextEdit(或等效项)打开 makefile 并更改行

ARCH="-arch i386 -arch x86_64"

ARCH=-arch x86_64

(当然,假设您的系统是 64 位的)。

这可能还不够。 Xcode 仍然无法找到该库。我解决了使用

cd /usr/local/lib
sudo ln -s libpng15.dylib ./libpng15.15.dylib

成功了。现在可以正常使用了。

【讨论】:

以上是关于MacOSX下libpng的链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

使用静态成员时的链接器错误

升级到 XCTest 时出现链接器错误

clang++ mac os x c++11 链接器问题

OS X Mavericks 上 gtest 的链接器错误

Lua 错误加载模块 'libpng' (Torch, MacOSX)

libpng 未在 Mac OSX 10.9.2 上链接