&引用;XXX“;,引用自:XXX contin libXXX.a(XXX.o)问题使用C++;C与目标C+混合+;用于Iphone库/游戏

&引用;XXX“;,引用自:XXX contin libXXX.a(XXX.o)问题使用C++;C与目标C+混合+;用于Iphone库/游戏,iphone,c++,objective-c,cross-platform,static-libraries,Iphone,C++,Objective C,Cross Platform,Static Libraries,我正在为PC/Iphone开发一个静态库 库名为libNerv.lib/libNerv.a 项目用C++编写(+ iPhone的目标C++)< /P> 到目前为止,pc和iphone的一切都运行良好。 游戏应用程序使用库并将其链接起来。但是现在我不得不在项目中使用libpng。 我想共享一个库,所以我将libpng中的.c文件包含到我的库项目中。在windows上,一切正常!游戏可以链接到我的图书馆没有问题 今天我转到Iphone,将libpng文件添加到Iphone项目中,库构建得很好。一旦我

我正在为PC/Iphone开发一个静态库

库名为libNerv.lib/libNerv.a

项目用C++编写(+ iPhone的目标C++)< /P> 到目前为止,pc和iphone的一切都运行良好。 游戏应用程序使用库并将其链接起来。但是现在我不得不在项目中使用libpng。 我想共享一个库,所以我将libpng中的.c文件包含到我的库项目中。在windows上,一切正常!游戏可以链接到我的图书馆没有问题

今天我转到Iphone,将libpng文件添加到Iphone项目中,库构建得很好。一旦我构建游戏应用程序,链接器就会失败,并显示以下消息:

  "_png_read_image", referenced from:


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


  "_png_create_read_struct", referenced from:


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


  "_png_read_end", referenced from:


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


  "_png_destroy_read_struct", referenced from:


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


  "_png_read_info", referenced from:


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


  "_png_read_update_info", referenced from:


      NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o)


ld: symbol(s) not found


collect2: ld returned 1 exit status
这是一个问题,因为它忽略了我所有的尝试。(注意,它与pc上的VS2008兼容!!) 我尝试了几种方法来消除链接器错误:

我曾尝试将所有libpng文件从.c改为cpp,效果很好,我只需解决2个类型转换错误(void*改为char*),但仍然有相同的错误。 我试图为libpng文件创建一个自己的库。但它也不起作用

我试图用ar、libtool、ranlib打开我的libNerv.a,但没有成功(只是告诉我它是用fat…或其他东西创建的)

libpng文件对cpp项目使用extern C声明,所以我不知道用cpp编译它是否好。也许有人也知道更多

有一件事我还没试过。我会将libpng文件添加到游戏应用程序中,并使用该应用程序进行编译,但我认为这不会起作用

(注意:所有引用问题都在同一个方法中,我不在其他任何地方使用libpng-此方法在libNerv.a中,它构建时没有问题。问题只在libNerv.a与iphone应用程序链接时出现!)


我希望有人能帮我解决这个问题:)

您是否将生成的
libpng.a
(或类似内容)添加为链接到主可执行文件的库之一

您成功构建了
libNERV.a
,这意味着您在用于生成
libNERV.a
的库列表中添加了
libpng.a


但是您也需要在主可执行文件的链接器设置中指定
libpng.a

基本上libpng不是一个单独的库,我也不会将libpng.a链接到libnerv.a。我将libpng中的.c和.h文件包含到我的libnerv.a项目中,然后将它们一起编译成libnerv.a,例如:文件(库):核心文件、服务文件、png文件、zlib文件输出:libnerv.a(与标准libs链接)文件(app):游戏文件输出:game.app(与libnerv.a和标准libs链接)但我试图编译一个只包含png内容的库,所以我将nerv.a和png.a链接到我的应用程序(但有相同的项目)嗯。。。那就行了。你能发布命令行来生成libnerv.a和你的主可执行文件吗?它被隐藏在XCode的构建窗口中。我不知道为什么,因为我什么也没做改变,但它现在可以工作了。。。然而,它可能会再次出现,我会在哪里找到确切的命令行,因为我不确定你的意思,我总是搜索一些类似于VS输出窗口的内容:)这里解释如下:参见图8.8。