2016-08-23 21 views
4

私のC++プロジェクトでは、MSVCを使用し、Linuxの場合はgccを使用して、Windowsで完全に動作するCMakeLists.txtプロジェクトがあります。私は、Windows用のクロスコンパイルにも同じファイルを使用しようとしています。CMakeがリンクに失敗しました

私は、Eclipse CDT4 - Unix Makefilesをジェネレータとして使用して、Eclipseでmakeファイルプロジェクトを作成しています。クロスコンパイラを使用するためには、私は、次のツールチェーンファイル

set(CMAKE_SYSTEM_NAME Linux) 

set(TOOL_CHAIN_ROOT "C:/mgc/embedded/codebench") 

# specify the cross compiler 
set(CMAKE_C_COMPILER ${TOOL_CHAIN_ROOT}/bin/x86_64-amd-linux-gnu-gcc.exe) 
set(CMAKE_CXX_COMPILER ${TOOL_CHAIN_ROOT}/bin/x86_64-amd-linux-gnu-g++.exe) 
set(_ECLIPSE_VERSION "4.5") 

を作成していると私は私がここで問題ありません

cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=../Source/cross-tool.cmake ../Source` 

プロジェクトファイルを生成していますどのようにこれはあります。私も

cmake --build . 
プロジェクトをコンパイルし始め

でソースファイルをコンパイルすることができますが、リンクしようとしている一番最後に、このエラーで失敗します。

[100%] Linking CXX executable crossProject 
x86_64-amd-linux-gnu-g++.exe: error: CMakeFiles/crossProject.dir/Path/To/ObjectFile.cpp.o: No such file or directory 
make.exe[2]: *** [crossProject] Error 1 
make.exe[1]: *** [CMakeFiles/crossProject.dir/all] Error 2 
make.exe: *** [all] Error 2 

しかし、私はCMakeFiles/crossProject.dir Iをチェックするときそれが見つからないと訴えているオブジェクトファイルを見ることができます。それはそこにある。

私はこのクロスコンパイラをしばらく使用しており、正しく動作していると確信しています。私は実際にCMakeを使用しないEclipse内部ビルダーと同じクロスコンパイラを使用して同じプロジェクトを構築しています。だから問題は、クロスコンパイラ自体ではありません。

x86_64-amd-linux-gnu-ld.exeの代わりにx86_64-amd-linux-gnu-g++.exeをリンクするのが普通ですか?

答えて

0

問題はWindowsであり、コンパイラでもCMakeでもありません。あなたはそれについてもっと読むことができるhereしかし、その要点は、Windowsコマンドラインで8192文字の制限があるということです。基本的には、8192文字以上のコマンドは実行できません。 CMakeが実行しようとしていたリンクコマンドは11353文字です。そのため、そのエラーで失敗します。

解決策は、別のシェルを使用することです。ブログ記事で述べたように、sourceforgeからGNU ARM Eclipseビルドツールをダウンロードできます。

一度ダウンロードしてインストールすると、make.exesh.exeは、<Installation-Path>/binからツールチェーンがどこにあっても、上司のようなリンクにコピーされます!

私はさまざまなコンパイラ、qnx - gcc - cross gccで試してみて、それは完全に動作します。

関連する問題