Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

不慣れな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のモードによっては、きちんとビルドできて実行できているのに、他の条件ではビルドに成功しないことがある。
 本当になぞであって、何とかしてほしいと思う。

nonbiri15
Python, scikit-learn, OpenCV使いです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away