iPhone向けのメーラーを作ってみようと思い、LibEtPan というライブラリをGitHubから
ダウンロードして、以下のURLにある pop-sample.c のサンプルコードを使ってみたところ
エラーが出ました。
結論からいうとエラーメッセージをそのままネットで調べて、とりあえずコンパイルエラーは
発生しなくなり、無事、ライブラリを使う事はできたのですが、なぜ動くようになったのか、
今のコンパイルエラーが出ていない状態がはたして正しいのかがわかっておりません。
以下、エラー発生までのプロセスです。
1、新規でiPhone向けプロジェクトを作成
2、libEtPanをサブプロジェクトとして追加
3、libetpan-ios.a をLinkに追加
4、Other Linker Flagsに -lsasl2 を設定
5、pop-sample.cのサンプルコードをコピー
(サンプルコード内にあるファイル書き込みの処理はコンソールにメール内容を表示する処理に置き換えた)
手順3と4は以下GitHubのREADMEに書いてある手順です。
https://github.com/dinhviethoa/libetpan
この状態でビルドすると、以下のようなエラーが発生しました。
Undefined symbols for architecture i386:
"_SecCertificateCopyData", referenced from:
_mailstream_low_cfstream_get_certificate_chain in libetpan-ios.a(mailstream_cfstream.o)
"_deflate", referenced from:
_mailstream_low_compress_write in libetpan-ios.a(mailstream_compress.o)
"_deflateEnd", referenced from:
_mailstream_low_compress_open in libetpan-ios.a(mailstream_compress.o)
_mailstream_low_compress_free in libetpan-ios.a(mailstream_compress.o)
"_deflateInit2_", referenced from:
_mailstream_low_compress_open in libetpan-ios.a(mailstream_compress.o)
"_inflate", referenced from:
_mailstream_low_compress_read in libetpan-ios.a(mailstream_compress.o)
"_inflateEnd", referenced from:
_mailstream_low_compress_open in libetpan-ios.a(mailstream_compress.o)
_mailstream_low_compress_free in libetpan-ios.a(mailstream_compress.o)
"_inflateInit2_", referenced from:
_mailstream_low_compress_open in libetpan-ios.a(mailstream_compress.o)
"_kCFStreamPropertySSLPeerCertificates", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
_mailstream_low_cfstream_get_certificate_chain in libetpan-ios.a(mailstream_cfstream.o)
"_kCFStreamPropertySSLSettings", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
"_kCFStreamSSLAllowsAnyRoot", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
"_kCFStreamSSLAllowsExpiredCertificates", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
"_kCFStreamSSLAllowsExpiredRoots", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
"_kCFStreamSSLLevel", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
"_kCFStreamSSLValidatesCertificateChain", referenced from:
_mailstream_cfstream_set_ssl_enabled in libetpan-ios.a(mailstream_cfstream.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
そこで、上記のエラーメッセージをネットで検索し、結果的には以下のことをすることで、コンパイルエラーが
解消しました。
・CFNetwork.framework と Security.framework のLink追加
・Other Linker Flags に -lz の追加
そこで、質問ですが、熟練したプログラマは、上記のようなエラーが出たとき、
そのエラーメッセージからどういう情報を読み取り、どのようなプロセスで問題を
解決するのでしょうか?
私は、上記のエラーメッセージを見ても「Undefined symbols」というメッセージから
何かライブラリが足りないのかな?程度しか情報を読み取る事ができませんでした。
以上、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
> 私は、上記のエラーメッセージを見ても「Undefined symbols」というメッセージから
> 何かライブラリが足りないのかな?程度しか情報を読み取る事ができませんでした。
このメッセージから読み取れることだったら、熟練者でも大体同じだと思います。
あとは
○ これが発生しているのは、リンク工程
Undefined Symbolsというエラーからも判断できるし
> ld: symbol(s) not found for architecture i386
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
とリンカでエラーになっていることが明記されている
→ ソースコードからオブジェクトファイルへコンパイルするのは成功しているようである
○ "_SecCertificateCopyData" 等が具体的な「未定義シンボル」
→ソースコードには、 先頭の _ を除いた「SecCertificateCopyData」等が使われている
→必要なライブラリ/フレームワークを探すためのヒント
くらいでしょうか。
この回答への補足
回答ありがとうございました!
>→ ソースコードからオブジェクトファイルへコンパイルするのは成功しているようである
なるほど。
コンパイルとリンクの違いもよくわかってなかったんですが、
コンパイルは成功しているが、リンクで失敗しているということがわかると、
コードの文法的な誤りはないけど、ライブラリなどのリソースが足らない
ということがわかるのですね。
>→ソースコードには、 先頭の _ を除いた「SecCertificateCopyData」等が使われている
>→必要なライブラリ/フレームワークを探すためのヒント
SecCertificateCopyDataがどのライブラリ/フレームワークに含まれているかは、
やはり、Webで検索するなどして調べるしかないものなんですね。
もしくは、製品のマニュアルなどに記載されるべきものということでしょう。
大変参考になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- その他(SNS・コミュニケーションサービス) 自分のpcがハッキングされたようなメールが来たのですがどうすればいいですか? 4 2022/10/02 16:14
- Visual Basic(VBA) エクセル VBA 難しいです 1 2023/02/21 15:39
- 英語 What is leveraged trading?Borrowing money to multi 1 2022/04/03 16:36
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- 英語 英語の質問 至急お願いします 1 2023/04/16 19:13
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(プログラミング・Web制作) Pythonのライブラリ、randomについて 3 2022/09/20 14:30
- 英語 L-PRF can be obtained by manual or automated metho 1 2022/04/08 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
コンパイルできません。
-
Excelのエラーで困ってます。
-
ビルドが失敗してしまいます
-
適切な変換関数が存在しない???
-
fortranでプログラムを実行する...
-
Arduinoに関する質問
-
Visual Studioのstrcpy_sについて
-
HEWを使用しているのですが、こ...
-
ビルド失敗 指定されたファイ...
-
WindowsからLinuxへの移植
-
入れ子になっている構造体配列...
-
”wchar_t*型は渡せない”という...
-
sys/time.hのインクルードがで...
-
エラー 'iostream.h' : No su...
-
VB2008で定数に色の設定をした...
-
SONY Readerで公開pdfを読む時...
-
VisualStudio2010 VC++ エラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
Excelのエラーで困ってます。
-
HEWを使用しているのですが、こ...
-
適切な変換関数が存在しない???
-
VB2008で定数に色の設定をした...
-
fortranでプログラムを実行する...
-
BC30002: 型 'ListItem' が定義...
-
VBAでファイルを開くプログラム...
-
sys/time.hのインクルードがで...
-
error C3867 関数呼び出しには...
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
LPCWSTRとchar
-
RightとLeft関数のライブ...
-
Handlesについて
-
multiple definitionというエラー
-
ACCESSのDate関数のエラー表示...
-
WindowsからLinuxへの移植
おすすめ情報