1

さて、あるファイルの事前宣言と別のファイルの実装を使用して、C ライブラリ (Microsoft の LibJXR) をコンパイルおよびリンクする際にいくつかの問題が発生しています。(iOS 用の FreeImage 3.16 のビルド)

コンパイル部分は成功していますが、リンクはそれほど多くありません(ただし、問題はコンパイルにあると思います)。

これが私が知っていることです。という関数への事前宣言を持つ「decode.c」というファイルがありますが、AdaptHighpassDecこれは という別の c ファイルに実装されています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他のエラーは同じ問題だと思いますが、機能が異なります。

ソース ファイルを大幅に作り直すことなく、オブジェクトを 1 つにコンパイルするなど、これを解決する方法はありますか? または、他のcファイルをメインのファイルにマージして、そのファイルのみをまとめてコンパイルする必要があります。

私は makefile を使用してライブラリとカスタム スクリプトを構築しており、役立つ場合は共有できます

最初の問題ファイルの C ソース ファイルは次のとおりです: https://gist.github.com/danoli3/8703453ee7ce7eff7a8a

4

0 に答える 0