1

コードが c++ である静的ライブラリがあります。客観的なCアプリで使いたいです。

(以前から C ライブラリを使用しており、問題なく動作しています。)

ライブラリを追加してビルドしようとしましたが、「名前空間」とベクトルがヘッダー ファイルのどこかで使用されていたため、ビルドできませんでした。そのため、目的の C ファイルのタイプを目的の C++ に変更する必要がありました。(拡張子を .mm に変更しませんでした)。このファイルは別のファイルに含まれていたため、他のいくつかのファイルと同様に、そのファイルも c++ に変更する必要がありました。

現在、名前空間エラーはありません。しかし、ビルドすると、参照されているシンボルが見つからないことがわかりました。拡張子を.mmに変更しましたが、同じです。私はいくつかの検索を行い、マングリングについていくつかのことを読みました。私はそれが何であるかを理解していませんが、ここに私が試したことがあります.

C++ 関数を直接呼び出す代わりに、宣言の前に「extern "C"」を付けた C 関数を作成し、ライブラリ呼び出しはこの C 関数に存在していました。まだ同じ。c 関数の実装の前に「extern "C"」を付けましたが、これも同じです。

また、xcode が .mm 拡張子を認識した場合にのみ、g++ コンパイラを使用することも読みました。その場合、extern "C" は必要ありません。それは...ですか?

[その他のコンパイラ フラグ] ターゲット設定にいくつかのコンパイラ フラグを追加する必要がありますか?

ld: warning: directory not found for option '-F-F/Users/username/Desktop/projectFolder'
Undefined symbols for architecture armv7:
  "IIS::Image::Image::Image(unsigned int, unsigned int, ImageFormat)", referenced from:
      -[ImageEditorSupport loadToolKitForImage:width:height:length:] in ImageEditorSupport.o
  "IIS::Image::Image::getNumComponents(unsigned int&) const", referenced from:
      -[ImageEditorSupport loadToolKitForImage:width:height:length:] in ImageEditorSupport.o
  "IIS::Image::ToolKit::adjustSaturation(IIS::Image::Image const&, unsigned int, IIS::Image::Image&)", referenced from:
      -[ImageEditorSupport applyToolkitForEditID:intensity:] in ImageEditorSupport.o
  "IIS::Image::ToolKit::adjustContrast(IIS::Image::Image const&, unsigned int, IIS::Image::Image&)", referenced from:
      -[ImageEditorSupport applyToolkitForEditID:intensity:] in ImageEditorSupport.o
  "IIS::Image::Image::Image(unsigned int, unsigned int, ImageFormat, void*, unsigned int)", referenced from:
      _create_image_using_buffer in ImageEditorSupport.o
  "IIS::Image::ToolKit::adjustColorTemp(IIS::Image::Image const&, int, IIS::Image::Image&)", referenced from:
      -[ImageEditorSupport applyToolkitForEditID:intensity:] in ImageEditorSupport.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

また、正しいライブラリ検索パスを追加したことを何度か確認しました。2つの「-FF」については疑問です。期待していたのは1人だけ。

*編集: *警告では、パスの代わりに-F-F/Users/username/Desktop/projectFolder検索していることを意味しますか?その余分なものはどうして来るのでしょうか?-F/Users/username/Desktop/projectFolder/Users/username/Desktop/projectFolder-F

4

2 に答える 2

1

armv7アーキテクチャ用にコンパイルされていないようです。あなたはlipo-infomyLib.aで確認することができます

于 2012-10-10T10:51:33.757 に答える
1

そのライブラリUIViewControllerを使用しているのは、代わりc++に拡張子を持っている必要があります(これがデフォルトです)。また、あなたは今すべきです.mm.mmain.mmain.mm

これは、c++でコードを使用しているためですObjective-c

于 2012-10-10T10:57:22.273 に答える