さて、あるファイルの事前宣言と別のファイルの実装を使用して、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