もともと Linux OS で書かれたプログラムを MAC OSX でコンパイルしようとしています。これは、いくつかのメイクファイルを含む大きなプログラムです。私は何週間もそれに取り組んできましたが、未定義のシンボルエラーを引き起こしている理由を理解できないようです. コンパイルの順序が正しくなるように、他のメイクファイルを呼び出す包括的な Makefile が 1 つあります。
コンパイルすると、静的ライブラリと複数のアプリケーションが作成されます。この人たちは非常に巨大であるため、プログラムはこれらの静的ライブラリ (.a ファイル) を最初に作成します。次に、アプリケーション専用のソース コードをコンパイルするときに、静的ライブラリをリンクします。(あまり混乱しないことを願っています) .
静的ライブラリのビルドは問題なく完了できますが、アプリケーションがビルドされる時点に到達すると、大量の未定義シンボル エラーが表示されます。たとえば、
未定義のシンボル: "_bagUpdateOptSurface"、参照元: libdbdbv6.a(dbv_bag.o) の _dbv_bag
nm で dbv_bag.o をチェックすると、ヘッダー U で定義されていない多くの関数が表示されます。
この関数を nm でトレースバックして、それを見つけることができます...
bagUpdateOptSurface.c -->bagUpdateOptSurface.o -->libbag.a --->dbv_bag.c --->dbv_bag.o --->libdbdv6.a --->application
関数はヘッダー T を持つスタティック ライブラリ libbag.a で定義されていますが、オブジェクト ファイル dbb_bag.o では U で未定義として定義されています。どこかで情報が失われ、その理由を理解できないようです。
プログラムを Mac に移植する経験が豊富な誰かが、何が起こっているのかを明らかにするのに役立つなら、私は非常に感謝しています。正しいまたは間違っているアイデアは大歓迎です。
前もって感謝します