2

恐ろしい典型的なリンカーエラー。

ld:アーキテクチャarmv6のシンボルが見つかりませんcollect2:ldが1の終了ステータスを返しました

しかし、それはファイル名が原因ですか?私はC++/ Objective-Cを使用しているため、すべてのObj-Cファイルは.mmですが、.cファイルを使用することはできません。たとえば、プロジェクトにSFMTアルゴリズムを含めたところ、これらのエラーが発生していましたが、単一の.cファイルを.cppに変更するだけで問題がなくなり、コードは正常に機能します。ヘッダーのみを含めているので、なぜこれが違いを生むのかわかりません。

問題は、Freetype2をインクルードしようとしていて、同じ問題が発生することです(.cであるためです)が、すべてのファイルの名前を変更するには大きすぎます。また、リンクされたバイナリを使用しているので、新しいファイル名で再コンパイルしましたが、変更できません。だから今、これの背後にある本当の理由を見つける時が来ました。

なぜこれが起こるのか考えていますか?.cファイルのリンカーエラーを停止するにはどうすればよいですか?

4

2 に答える 2

0

cヘッダーファイルをこれで囲みます。これは、インクルードを囲むこともできます。

#ifdef __cplusplus   
extern "C" {         
#endif     

// function declarations etc if this is your own header.
// OR you can use this in the .mm file to surround your include.
//...

#ifdef __cplusplus       
};                       
#endif   

これは、c関数の外部リンケージを指定します。c .hファイルを含めるときにこれを行わないと、C ++コンパイラーはCコンパイラーとは異なる方法でマングルし、リンカーに問題を引き起こします。
を使用することによりextern "C"、C++コンパイラに関数のCスタイルのマングリングを使用するように指示します。

于 2012-02-12T07:36:16.610 に答える
0

Freetypeインクルードをextern "C"ディレクティブ内にラップします。

// Non-C includes
#include <iostream>

extern "C"
{
    #include <freetype/freetype.h>
    // ... Other freetype includes
}

おそらく、ディレクティブ内の#import代わりに使用できます。試したことはありませんが、なぜうまくいかないのかわかりません。#includeextern "C"

于 2012-02-12T07:38:34.960 に答える