2017-11-28 10 views
1

私はSwiftプロジェクト(Xcode 9.1、macOS 10.13)を持っていて、SwiftでCファイルのヘッダーをブリッジすることで、自分のCライブラリとViewController.swiftをリンクしようとしました。Apple Mach-O Linkerエラー_

Screen of my project

しかし、comilationエラーが発生し、これが出力されました:私は間違って

 

Undefined symbols for architecture x86_64: 
    "_HTS_Engine_clear", referenced from: 
     _Flite_HTS_Engine_clear in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_clear) 
    "_ffeature_string", referenced from: 
     _create_label in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_phoneme in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_word in flite_hts_engine.o 
    "_val_string_n", referenced from: 
     _create_label in flite_hts_engine.o 
    "_HTS_Engine_initialize", referenced from: 
     _Flite_HTS_Engine_initialize in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_initialize) 
    "_HTS_Engine_set_speed", referenced from: 
     _Flite_HTS_Engine_set_speed in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_speed) 
    "_register_cmu_us_kal", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
    "_relation_head", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_label_data in flite_hts_engine.o 
    "_item_next", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _create_label in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_label_data in flite_hts_engine.o 
    "_utt_relation", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_label_data in flite_hts_engine.o 
    "_HTS_Engine_refresh", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
    "_HTS_Engine_set_volume", referenced from: 
     _Flite_HTS_Engine_set_volume in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_volume) 
    "_delete_utterance", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
     _Flite_Text_Analyzer_clear in flite_hts_engine.o 
    "_unregister_cmu_us_kal", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
     _Flite_Text_Analyzer_clear in flite_hts_engine.o 
    "_HTS_Engine_save_riff", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
    "_flite_synth_text", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
     _Flite_Text_Analyzer_analysis in flite_hts_engine.o 
    "_HTS_Engine_set_msd_threshold", referenced from: 
     _Flite_HTS_Engine_set_msd_threshold in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_msd_threshold) 
    "_HTS_Engine_set_beta", referenced from: 
     _Flite_HTS_Engine_set_beta in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_beta) 
    "_HTS_Engine_add_half_tone", referenced from: 
     _Flite_HTS_Engine_add_half_tone in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_add_half_tone) 
    "_val_string", referenced from: 
     _create_label in flite_hts_engine.o 
    "_HTS_Engine_set_alpha", referenced from: 
     _Flite_HTS_Engine_set_alpha in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_alpha) 
    "_HTS_Engine_set_gv_weight", referenced from: 
     _Flite_HTS_Engine_set_gv_weight in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_gv_weight) 
    "_HTS_Engine_synthesize_from_strings", referenced from: 
     _Flite_HTS_Engine_synthesize in flite_hts_engine.o 
    "_HTS_Engine_set_sampling_frequency", referenced from: 
     _Flite_HTS_Engine_set_sampling_frequency in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_sampling_frequency) 
    "_HTS_Engine_set_fperiod", referenced from: 
     _Flite_HTS_Engine_set_fperiod in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_fperiod) 
    "_ffeature_int", referenced from: 
     _create_label in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_nphoneme_in_syllable in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_nsyllable_in_word in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_nword_in_phrase in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_nphrase_in_utterance in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_accent in flite_hts_engine.o 
     _Flite_Text_Analyzer_get_stress in flite_hts_engine.o 
     ... 
    "_HTS_Engine_load", referenced from: 
     _Flite_HTS_Engine_load in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_load) 
    "_HTS_Engine_set_audio_buff_size", referenced from: 
     _Flite_HTS_Engine_set_audio_buff_size in flite_hts_engine.o 
    (maybe you meant: _Flite_HTS_Engine_set_audio_buff_size) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

何をしているのですか? DerivedData上のすべてのファイルを削除しようとしましたが、同じプロジェクト(Clean/By)でクリーニングしても問題は変わりませんでした。

答えて

1

これは実際にはコンパイルエラーではありません。これはリンカのエラーです:SwiftとあなたのCコードはうまくコンパイルされましたが、他のライブラリのコンパイル済みコードが見つからなかったので、すべての部分をリンクすることはできませんでした。

あなたの写真から推測すると、flite_hts_engine.cflite_hts_engine.hというファイルにCラッパーを書きましたが、他のCコードの一部はhtsEngineLibです。たとえば、_Flite_HTS_Engine_initializeがラッパーにあり、ライブラリ内で_HTS_Engine_initializeを使用しようとしましたが、その(コンパイルされた)コードを使用できないか、または誤ったアーキテクチャーのコードが使用されている可能性があります。

この問題の解決方法は、htsEngineLibのソースコードがあるかどうかなどの詳細によって異なります。そうした場合、簡単な解決策はプロジェクトの一部にすることです。コンパイルされたライブラリのみを持っている場合は、そのライブラリが適切なアーキテクチャに対応していることを確認する必要があります。たとえば、iPhone用にコンパイルされたライブラリがある場合、それを使ってmacOSまたはiPhoneシミュレータ用のアプリケーションを構築することはできません。

+0

hts_engineLibのすべてのライブラリにソースファイルを追加した後、リンカのエラーが消えて、6つのコンパイルエラーが表示されますが、それを修正しますが、66回のリンカエラーが発生します。オブジェクトファイル(.o)をすべてのソースファイルに追加しようとしましたが、エラーはまだ発生します。 Cワッパー、.cと.hファイルでCラッパーを書く方法は? – NoraQm

+0

典型的なコンパイルエラーとリンカエラーは何ですか?どのようにしてコンパイルの問題を修正しましたか? .oファイルをプロジェクトに追加しましたか?それは決して行われるべきではありません、彼らはソースコードではありません。最初にhtsEngineLibの周りにラッパーを作成しようとしたのはなぜですか?インターフェイスを簡素化するために、またはC++のlibですか? SOとWebには、一般にラッパーを書くことに関する多くの情報があります。 – OmniProg

関連する問題