1

C++11 をサポートする 3 つのプロジェクトのワークスペースをコンパイルしようとしています。この一連のプロジェクトは、LLVM コンパイラの既定値を使用して正常にコンパイルおよびリンクされています。さらに、c++ コードは以前に g++、llvm、msvc、sun、irix などを含む多くのコンパイラでコンパイルされているため、非常にクリーンなコードです。

ワークスペースのビルド設定の C++ 言語の方言セクションの下に、3 つの項目があります。

c 言語方言
c++ 言語方言
c++ 標準ライブラリ

設定の使用:

c 言語の方言: コンパイラのデフォルト
c++ 言語の方言: コンパイラのデフォルト
c++ 標準ライブラリ: libc++ (c++11 をサポートする LLVM c++ 標準ライブラリ)

正常にコンパイルできますが、多くのリンク エラーが発生します。一部は独自の関数からのもので、一部は標準関数からのものです。標準関数へのリンク エラーの例を次に示します。

(null): "std::string::find_last_of(char const*, unsigned long) const"、参照元: (null): "std::string::size() const"、参照元:

間違った標準ライブラリにリンクしていることは明らかだったので、上記のさまざまなオプションを変更して調査しました。方言を -std=c++11 に変更すると、コンパイルが壊れました。自分に合った組み合わせが見つかりませんでした。

何が間違っているのか教えていただけますか?

編集:これを行う私の動機は、objective-c とインターフェイスする C++ コードで std::thread を使用したい (そしてその C++ コードを引き続き移植可能にする) ことです。

4

3 に答える 3

3

XCode 4.5.2 / OSX 10.8.2

私はこれらを取得しています

(null): "std::string::find_last_of(char const*, unsigned long) const", 
 referenced from: (null):    "std::string::size() const", referenced from:

さまざまなバージョンの openCV ライブラリを使用してさまざまに。問題は C++ 標準ライブラリへのアクセスにあるようです。この場合の作業設定は次のとおりです。

古いライブラリ バージョン:

C Language Dialect GNU99[-std=gnu99]
C++ Language Dialect GNU++11[-std=gnu++11]
C++ Standard Library libstdc++ (GNU C++ standard library)

最近のライブラリ バージョン:

C Language Dialect GNU99[-std=gnu99]
C++ Language Dialect GNU++11[-std=gnu++11]
C++ Standard Library libc++ (LLVM C++ standard library with C++11 support)

標準ライブラリの仕様をいずれかのバージョンに切り替えると、これらのエラーが発生します。

于 2013-01-10T03:54:08.083 に答える
1

私はついに問題を2つのことにたどりました

1)コンパイラオプションをワークスペースレベルで設定したにもかかわらず、これらのオプションは構成プロジェクトに伝達されていませんでした。知っておくべきこと!したがって、実際には、さまざまなプロジェクトがさまざまなコンパイラライブラリと方言のセットでコンパイルされていたので、当然のことながらリンクエラーが発生しました。私のために働いたオプションの組み合わせは次のとおりです。

C言語ダイアレクトコンパイラデフォルト
C++言語ダイアレクト -std=c ++ 11
C++標準ライブラリlibc++(C++11をサポートするLLVMC++標準ライブラリ)

2)c ++ 11コンパイルでは、私のプロジェクトの1つがコンパイルされませんでした。構文エラーを修正した後、上記のオプションで正常にコンパイルおよびリンクされました

于 2013-01-10T23:17:45.057 に答える
1

コード5を使用している間、私は同様の問題を抱えていました

Undefined symbols for architecture armv7:
"std::string::clear()", referenced from:
FormatLog(unsigned int, int, char const*, std::string&) in libMO.a(AppLog.o)

「展開ターゲット」を 7.0 から 6.0 に変更すると役に立ちました。

XCode 4.5 の場合、C++ 標準ライブラリのコンパイラではLLVM C++ with C++11 supportなくコンパイラを使用する必要があるようです。GNU C++

于 2013-12-03T06:39:55.037 に答える