0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VScodeで突然clang: error: linker command failed with exit code 1 (use -v to see invocation)が出てきて困った話

Posted at

エラーに遭遇

いつものようにVScodeでc++を使って音諳を作っていた時のこと。

デバッグしようと思ってファイルのデバッグを行おうとするとこんなエラーが出てきました。

略...
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ビルドが完了しましたが、エラーが発生しました。

 *  ターミナル プロセスが終了コード -1 で終了しました。 
 *  ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。

見たことないエラーだったので、いつもの如くGoogleにエラーコードを突っ込むと、何やらcode runnerのエラーだったり、task.jsonの設定ミスだったりの記事が出てきました。

しかし私、code runnerは使ってないし、ちょっと前まで動いていたし、task.jsonも問題なさそうでよくわかりませんでした。

エラーコードにlinkerって書いてあるし、エラーコードの前の方にオブジェクトファイルがたくさん出てきていたので、リンカーのエラーかなというのはわかったのですが、そこまでしかわかりませんでした。

原因

エラーが出て数十分が経過した頃。

もうほんとにわからなかったので、ちょっとずつ翻訳しようとエラーの最初の文をgoogle翻訳に突っ込みました。
すると、こんな感じでした。

duplicate symbol '__ZN15nesora_literalsli5_NSLCEPKc' in:
重複したシンボル '__ZN15nesora_literalsli5_NSLCEPKc' が次の場所に存在します:

ここで私は全てを察しました。
私はこのエラーが出る前、自前のユーザー定義リテラルを作っていたのでした。
そのリテラルの実装をヘッダーファイルに直書きしていたので、コンパイルするときにそのヘッダーファイルを include している.cpp毎に定義されて、リンカーがガッチャンコするときにその関数が重複してエラーを吐いていたのでした。

解決

ヘッダーファイルに直書きしている関数をinline化するとエラーは無くなりました。

エラー文は最後だけ見てちゃダメですね。
というか英語が脊髄でわかるようになりたい。そうすれば脊髄反射で気づけたのに。
...視覚情報は脊髄通らないか。はは...

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?