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?

【備忘録】動的リンクになるように設定した覚えがないのに、dllが見つからないとかいうエラーが出た時の対処法

Last updated at Posted at 2025-12-06

私はノートパソコンとデスクトップPCという2つのPCで開発を行っていたが、以下のような奇妙な症状が発生した。

症状

1つ目

デスクトップPCでソースコードをコンパイルして実行可能ファイルを作成する。このとき、vscode上のデバッガーではうまく動くが、エクスプローラやターミナルから起動しようとすると、「プロシージャエントリポイントがダイナミックリンクライブラリから見つかりませんでした。」というエラーが出る。

2つ目

デスクトップPCでコンパイルした実行可能ファイルをノートPCに転送して実行しようとしたところ、以下のような3つのエラーが出る。

  • 「libgcc_s_seh-1.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。」
  • 「libmcfgthread-2.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。」
  • 「libstdc++-6.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。」

3つ目

同じソースコードをノートパソコン上でコンパイルしたところ、デスクトップPC上でもノートパソコン上でも正常に動作する。

原因

原因は、GCCコンパイラの配布元の違いによる動作の差異であった。

デスクトップPCのGCCはMingw-w64のバージョンであった。この場合、デフォルトが動的リンクになる?ようである。つまり、デスクトップPC上で作成した実行可能ファイルは、知らないうちに追加のdllファイルが必要な設定になっていたのである。

一方、ノートPCにインストールしたGCCはTDM-GCCであった。これは、デフォルトで静的リンクになっており、dllファイルは必要ないというわけである。

解決策

デスクトップPCで、コンパイル時に-staticオプションを指定するように設定を変更した。私はCMakeを設定しているので,ビルドの際に以下のオプションを追加した.

-DCMAKE_CXX_FLAGS=-static

これにより、静的リンクが行われ、dllがないことによるエラーが出ないようになる。

余談

この解決策はGeminiに教えてもらった。このとおりやってみたら、少なくとも自分の環境ではそっくり解決してしまった。最近のAIはすごい。もうAIの奴隷になるしかない。

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?