質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

Q&A

1回答

1823閲覧

gccによるコンパイル中に関数が増えて多重定義になる

vega

総合スコア28

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

0グッド

1クリップ

投稿2019/01/15 06:17

前提・実現したいこと

Ryuichi Yamamoto氏のdeepvoice3_pytorchを試したかったのですが、環境構築のためのinstall_tts.pyを実行中にエラーが発生しました。

発生している問題・エラーメッセージ

... (cd HTKLib && make HTKLib.a) \ || case "" in *k*) fail=yes;; *) exit 1;; esac; make[1]: ディレクトリ '/home/hoge/huga/dvp/speech_synthesis/htk/HTKLib' に入ります gcc -Wall -Wno-switch -g -O2 -I. -DPHNALG -c -o HGraf.null.o HGraf.null.c <ビルトイン>: ターゲット 'HGraf.null.o' のレシピで失敗しました make[1]: ディレクトリ '/home/hoge/huga/dvp/speech_synthesis/htk/HTKLib' から出ます Makefile:276: ターゲット 'HTKLib/HTKLib.a' のレシピで失敗しました STDERR: HGraf.null.c:100:6: error: redefinition of ‘ResetGraf’ void ResetGraf(void) ^ HGraf.null.c:94:6: note: previous definition of ‘ResetGraf’ was here void ResetGraf(void) ^ make[1]: *** [HGraf.null.o] エラー 1 make: *** [HTKLib/HTKLib.a] エラー 1 Traceback (most recent call last): File "install_tts.py", line 299, in <module> pe(["make"]) File "install_tts.py", line 116, in pe for line in execute(cmd, shell=shell): File "install_tts.py", line 109, in execute raise subprocess.CalledProcessError(return_code, cmd) subprocess.CalledProcessError: Command '['make']' returned non-zero exit status 2

該当のソースコード

HGraf.null.c

(前略) /* EXPORT->InitGraf: initialise memory and configuration parameters */ void InitGraf(void) { int i; Register(hgraf_version,hgraf_vc_id); nParm = GetConfig("HGRAF", TRUE, cParm, MAXGLOBS); if (nParm>0){ if (GetConfInt(cParm,nParm,"TRACE",&i)) trace = i; } } /* EXPORT->ResetGraf: reset the module */ void ResetGraf(void) { return; /* do nothing */ } /* EXPORT->ResetGraf: reset the module */ void ResetGraf(void) { return; /* do nothing */ } /* This is the null implementation of HGraf. */ /* EXPORT->HGetEvent: return next relevant event in event queue */ HEventRec HGetEvent(Boolean anyEvent, void (*action)(void)) { HEventRec r={0,0,0,0,0}; return r; } (後略)

HGraf.null.c.orig

(前略) /* EXPORT->InitGraf: initialise memory and configuration parameters */ void InitGraf(void) { int i; Register(hgraf_version,hgraf_vc_id); nParm = GetConfig("HGRAF", TRUE, cParm, MAXGLOBS); if (nParm>0){ if (GetConfInt(cParm,nParm,"TRACE",&i)) trace = i; } } /* EXPORT->ResetGraf: reset the module */ void ResetGraf(void) { return; /* do nothing */ } /* This is the null implementation of HGraf. */ /* EXPORT->HGetEvent: return next relevant event in event queue */ HEventRec HGetEvent(Boolean anyEvent, void (*action)(void)) { HEventRec r={0,0,0,0,0}; return r; } (後略)

試したこと

出力を見てHGraf.null.c内の多重定義になっているResetGrafの部分を削除して保存してから実行したのですが、実行中に書き換えられるらしく、実行後には多重定義になっていました。

補足情報(FW/ツールのバージョンなど)

OS:16.04.5 LTS (Xenial Xerus)
python :Python 3.6.3 :: Anaconda custom (64-bit)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

回答になってなく、申し訳ありませんが、、、

gcc でコンパイル失敗ではなく、makeで、C++コードを作成しているのではないかと思います。
install_tts.pyを見る限りでは、HTK-3.4.1.tar.gz のファイルを展開して、そこで makeしている事しか分かりませんでした。
HGraf.null.c は、最初からあるファイルでは無く、makeで作られるファイルと言う事は無いでしょうか?

多分、HTK-3.4.1.tar.gzファイルに makefileがあると思います。それを見てはどうでしょうか。 (install_tty.py からは、具体的な場所は不明ですが、?/hkt/ の下にありそう)

投稿2019/01/15 13:21

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問