私は、Paillier暗号化を実装し、XcodeでGMPライブラリを使用するthisライブラリを使用しようとしています。Xcodeで C++リンカーエラーを作成します
これを行うには、両方のライブラリをダウンロードして正常にビルドしました。次に、Xcodeのプロジェクト設定で、 "Library Search Paths"に "usr/local/include"を "Header Search Paths"と "/ usr/local/lib"に追加しました。また、 "-lgmp"と "-lpaillier"を "Other Linker Flags"に追加しました。
「gmp.h」と「paillier.h」を問題なく組み込むことができ、gmp機能も使用できます。しかし、私はpaillier機能を使用しようとするとビルドエラーが発生します。
Undefined symbols for architecture x86_64:
"paillier_keygen(int, paillier_pubkey_t**, paillier_prvkey_t**, void (*)(void*, int))", referenced from:
DOwner::run() in downer.o
"paillier_get_rand_devrandom(void*, int)", referenced from:
DOwner::run() in downer.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
私はこの問題の解決策をgoogleで見つけようとしましたが、私は見つかったものは何も見つかりませんでした。
UPDATE私は "-l:libpaillier.a" フラグ "-lpaillier" に切り替えて、次のエラー受信:
ld: library not found for -l:libpaillier.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
これが原因で、ファイル「libpaillier奇妙です。 a "は/ usr/local/libに" libgmp.a "をつけていますので、gmpファイルはどのように見つけることができますか? Xcodeが別のディレクトリで検索しているかどうか調べるために、sudo find/-name "libgmp.a"
を実行して、Xcodeが使用している可能性のある他のインスタンスがあるかどうかを確認しましたが、/ usr/local/libには1つしかありませんでした。
UPDATE
>「リンク・バイナリとライブラリを」私は「フェーズの構築」に行ってきましたライブラリに必ずXcodeのリンクを作成し、そこにファイル「libpaillier.a」をドラッグします。しかし、エラーは続く。
UPDATE
私は私のプロジェクトフォルダにソースコード全体を構成paillier.hとpaillier.cファイルをコピーしました。それから、paillier.cをターゲットプロジェクトにリンクしました。問題は持続した。しかし、私のプロジェクトがcppプロジェクトなので、ファイルをpaillier.hppとpaillier.cppに名前を変更すると、問題は解決されました。しかし、私はライブラリが使用するvoidポインタの算術演算を持つことは不正だと言う別のエラーが出ます。 Xcodeでvoidポインター演算を許可する方法はありますか?
私はそれを試しましたが、私はアーキテクチャi386のための '未定義のシンボル'を受け取ったので、私はそれが問題だとは思わない – user1546022