I compiled using just "make" command and included libcryptopp.a in my c++ project of my xcode. But it is giving errors ...
@halfelfが言ったように、あなたはそれはXcodeのが使用するものであるため、LLVMのランタイム(libc++
)を使用する必要があります。あなたが持っているCrypto ++のバージョンによっては、GNUランタイム(libstdc++
)を使用しているかもしれません。
これを修正する最も簡単な方法は、Masterをチェックアウトすることです。そのマスターは安定しており、時折ブレークする(ほとんどの開発は別のブランチで行われる)ので、マスターからの作業はOKです。暗号++の古いバージョンでは、ユーザーのCXX
とCXXFLAGS
を尊重していなかったので、マスターを使用して
$ git clone https://github.com/weidai11/cryptopp
Cloning into 'cryptopp'...
remote: Counting objects: 9116, done.
remote: Total 9116 (delta 0), reused 0 (delta 0), pack-reused 9116
Receiving objects: 100% (9116/9116), 8.05 MiB | 6.53 MiB/s, done.
Resolving deltas: 100% (6406/6406), done.
Checking connectivity... done.
が必要です。あなたはそれを修正するためにmakefileを編集する必要がありました。
次に、以下の手順を実行します。
export CXXFLAGS="-DNDEBUG -g2 -O2 -stdlib=libc++"
$ CXX=clang++ make -j 4
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -fPIC -march=native -pipe -c cryptlib.cpp
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -fPIC -march=native -pipe -c cpu.cpp
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -fPIC -march=native -pipe -c shacal2.cpp
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -fPIC -march=native -pipe -c md5.cpp
...
デバッグ/リリースビルド、シンボルレベルと最適化レベルを設定する必要があります。 makefileは残りのフラグを追加します。
-stdlib=libc++
が追加されているだけなので、上記の手の届かないところがあります。最も問題のないリンクを確保するためにXcodeが使用するCXXFLAGS
を使用する必要があります。異なったCXXFLAGS
を使用することは長年にわたって多くの問題を引き起こしました。
暗号++がfat-バイナリセーフ(unlike cURL and OpenSSL)であるので、あなたは次のことを行うことができるはずです。実際には、それはあなたのために箱から出して動作するはずですので、our test script tests this class of configurations(C++〜17 C++ 03を含むIntelとPPC脂肪のバイナリ、):
export CXXFLAGS="-DNDEBUG -g2 -O2 -stdlib=libc++ -arch i386 -arch x86_64"
$ CXX=clang++ make -j 4
$ make -j 4
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -arch i386 -arch x86_64 -fPIC -march=native -pipe -c cryptlib.cpp
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -arch i386 -arch x86_64 -fPIC -march=native -pipe -c cpu.cpp
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -arch i386 -arch x86_64 -fPIC -march=native -pipe -c shacal2.cpp
clang++ -DNDEBUG -g2 -O2 -stdlib=libc++ -arch i386 -arch x86_64 -fPIC -march=native -pipe -c md5.cpp
...
をUndefined symbols for architecture i386
を避けることができます両方のアーキテクチャを使用し、 Undefined symbols for architecture x86_64
。
ここにいくつかの関連するCrypto ++ wikiページがありますが、iOS用でありOS X用ではありません。ほとんどが適用されますが、正確には適用されません。
ここでは、コマンドラインからライブラリを構築する上でのWikiの記事です。あなたが実際に「コンパイラおよびC++ランタイム」の下で議論痛みのポイントを打つが、その容易に明らかにしていない:
デフォルトのmakeは '-march = native'オプションでそれを構築しますこれはx86_64バイナリにつながります。 – halfelf
どうすればいいですか? @halfelf –
Common Cryptoを使用するだけではなく、すべて「C」コードであり、ハードウェアサポートの最適化が行われています。 – zaph