2016-10-06 4 views
1

私は、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ポインター演算を許可する方法はありますか?

答えて

0

最後に解決したか、むしろその周りを回った。

  1. をする代わりに、私は私のプロジェクト内のソースファイルを含むライブラリとしてlibpaillierインポートする:ここで

    は私が撮ったの手順です。

  2. コンパイラに別の問題があったため、拡張子をhppとcppに変更しました。
  3. 私はすべてのインスタンスを、char *に算術演算で使用されたvoidポインタで置き換えました。
  4. 必要に応じて、charポインタへのvoidポインタをキャストします。

これは最も洗練された解決策ではないかもしれませんが、それは機能し、私は別の方法を見つけることができませんでした。

0

最初のエラーから判断すると、おそらく、32ビット用のライブラリ(ライブラリを作成するメイクファイルがあると思います)とアプリケーションを64ビット用にビルドしているため、リンカはライブラリを見つけますが見つからないあなたの意図したアーキテクチャの実装。

アプリケーションのXcodeでプロジェクト設定を確認し、32ビットに変更します。または、64ビットでライブラリを構築するためのビルド手順があるかどうかを確認してください。

+0

私はそれを試しましたが、私はアーキテクチャi386のための '未定義のシンボル'を受け取ったので、私はそれが問題だとは思わない – user1546022

関連する問題