C ++ libPNG - 简单的初始化错误

时间:2012-07-26 13:28:38

标签: c++ macos clang libpng

尝试编译时出现以下错误....

  

架构x86_64的未定义符号:     “_png_sig_cmp”,引自:         RenderUtils中的RenderUtils :: isValidPng(std :: istream&)   ld:找不到架构x86_64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我的代码如下:

//called from here
ifstream s;
s.open("/Users/tmg06qyu/Desktop/texture_512.png", ios::binary);

if(!RenderUtils::isValidPng(s)){
    throw 20;
}


//header
class RenderUtils{
public:
    static bool isValidPng(std::istream &source);
};



//implementation
#include <iostream>
#include "RenderUtils.h"
#include "png.h"
#define PNGSIGSIZE 8


using namespace std;

bool RenderUtils::isValidPng(std::istream &source){
//Allocate a buffer of 8 bytes, where we can put the file signature.
png_byte pngsig[PNGSIGSIZE];
int is_png = 0;

//Read the 8 bytes from the stream into the sig buffer.
source.read((char*)pngsig, PNGSIGSIZE);

//Check if the read worked...
if (!source.good()) return false;

//Let LibPNG check the sig. If this function returns 0, everything is OK.
is_png = png_sig_cmp(pngsig, 0, PNGSIGSIZE);
return (is_png == 0);
}

2 个答案:

答案 0 :(得分:0)

我的猜测是你构建了一个32位版本的libpng,但现在你正试图用它来连接64位代码。尝试file *otool -L *检查(从内存中)

答案 1 :(得分:0)

对不起大家......愚蠢的我。我需要链接zlib .....注意自己.....总是读自述....(好吧不总是!)