1

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

编译部分是成功的,但是链接不是很多(但是我相信问题出在编译中)。

所以这就是我所知道的。我有一个名为“decode.c”的文件,它有一个名为 的函数的预声明AdaptHighpassDec,但是这是在另一个名为segdec.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

4

0 回答 0