LoginSignup
1
1

More than 5 years have passed since last update.

リンクエラーを生じさせる方法(Eclipse)

Posted at

不慣れなWindows上Eclipse上でのリンクエラーに関してメモを残す。

事例1:Eclipseでのディレクトリの設定で,""で囲むと逆効果の設定がある。
LNK1104: cannot open file 'C:\Program.obj'
"C:\Program Files\boost_1_58_0\stage\lib"

リンク対象が
C:\Program
になってしまって生じる。
""で囲む、囲まないを変えてみて試してみる。

事例2:_MSC_VERの値 
Eclipseによる開発ではC++のコンパイラを選べる。C++のコンパイラとしてVisual Studio を使用している。Visual Studioでコンパイルしているのだから、前に「リンクエラーを生じさせる方法」で述べたように、Visual Studioのバージョンをそろえてコンパイル・リンクする必要がある。
 次のリンカのエラーは、そのことに注意して対策をしていく。

: error LNK2038: mismatch detected for '_MSC_VER': value '1700' doesn't match value '1800'

 Visual StudioのCコンパイラを用いている場合には、Visual Studioのバージョンを常に意識する必要がある。例を挙げれば、
boost_1_58_0\stage\libの下にあるlibファイルはファイル名の一部にlibファイルを生成したコンパイラを示すvc120の記述がある。
libboost_filesystem-vc120-mt-1_58.lib

また、OpenCVの配布の中にあるprecompileのライブラリにも、VCのバージョンごとに異なったファイル構成がある。
C:\opencv_2.4.11\build\x86\vc11\lib
C:\opencv_2.4.11\build\x86\vc12\lib

「リンクエラーを生じさせる方法(Visual Studio)」
に述べた内容に加えて、Eclipseの環境設定ファイルをエディタで開いてチェックする。
.settings フォルダの中にあるprefsファイルをチェックする。
例 org.eclipse.cdt.core.prefs
INCLUDE
LIB
PATH
などの設定値が書かれているので、
意図しない版のVisual Studioとそれを利用したlibファイルを使っていないか確認していく。
 Windowsのシステムの環境変数には、表示が読み取りにくいこともあって、十分にメンテナンスされておらず、古い設定が残っていたりする。
 
stackoverflowなどのサイトの情報を見ながら、チェックしていくこととしよう。

付記:
・言語仕様にしたがって書かれたC++のプログラムは、OSが共通であれば、使用するコンパイラやリンカに依存しないのが、期待したいところだが、実際にはそうなっていない。このことは、VisualStudioのバージョンがあがったときには、また、互換性が失われることを意味する。

・コンパイラやDebugやReleaseのモードによっては、きちんとビルドできて実行できているのに、他の条件ではビルドに成功しないことがある。
 本当になぞであって、何とかしてほしいと思う。

1
1
3

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
1
1