链接和编译C库未定义的符号。在另一个文件中预先声明要实现

时间:2014-09-02 05:18:47

标签: c makefile linker freeimage

好的,我在编译和链接C库(来自Microsoft的LibJXR)与一个文件中的预先声明和另一个文件中的实现时遇到了一些问题。 (为iOS构建FreeImage 3.16)

编译部分是成功的,但链接不是那么多(但我确实认为问题在编译中)。

所以这就是我所知道的。我有一个名为“decode.c”的文件,它对名为AdaptHighpassDec的函数进行了预先声明,但这是在另一个名为segdec.c的c文件中实现的。

使用i386(Xcode)目标构建lib时出现的堆栈错误

    Undefined symbols for architecture i386:
  "_AdaptHighpassDec", referenced from:
      _ResetCodingContextDec in freeimage.a(decode.o-i386)
  "_AdaptLowpassDec", referenced from:
      _ResetCodingContextDec in freeimage.a(decode.o-i386)
  "_DecodeMacroblockDC", referenced from:
      _processMacroblockDec in freeimage.a(strdec.o-i386)
      _WMPhotoTranscode in freeimage.a(JXRTranscode.o-i386)
  "_DecodeMacroblockHighpass", referenced from:
      _processMacroblockDec in freeimage.a(strdec.o-i386)
      _WMPhotoTranscode in freeimage.a(JXRTranscode.o-i386)
  "_DecodeMacroblockLowpass", referenced from:
      _processMacroblockDec in freeimage.a(strdec.o-i386)
      _WMPhotoTranscode in freeimage.a(JXRTranscode.o-i386)
ld: symbol(s) not found for architecture i386

所以我相信正在发生的事情是AdaptHighpassDec内置于strdec.o-i386对象中,所以当链接器说话时,哦,嘿AdaptHighpassDec中没有decode.o-i386在这里宣布。我认为其他错误是相同的问题,但功能不同。

因此,如果没有重要的源文件重做,有没有办法解决这个问题,比如将对象编译成一个?或者我应该将其他c文件合并到主文件中,并且只将它们一起编译。

我正在使用makefile来构建库和自定义脚本,如果有帮助我可以分享

以下是第一个问题文件的C源文件: https://gist.github.com/danoli3/8703453ee7ce7eff7a8a

0 个答案:

没有答案