2016-08-23 4 views
4

У меня есть CMakeLists.txt для моего проекта C++, который отлично работает в Windows, используя MSVC, а также в Linux с gcc. Я также пытаюсь использовать тот же файл для кросс-компиляции в Windows для Linux.Ошибка CMake при связывании

Я использую Eclipse CDT4 - Unix Makefiles в качестве генератора для создания проекта make-файла в Eclipse. Для того, чтобы использовать кросс-компилятор, я создал следующий файл ToolChain

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 может видеть файл объекта, который он жалуется, которого он не может найти. Это прямо сейчас.

Я использую этот кросс-компилятор некоторое время, и я уверен, что он работает правильно. Я на самом деле строю тот же проект, используя тот же кросс-компилятор с внутренним застройщиком Eclipse без CMake. Поэтому проблема не должна заключаться в самом кросс-компиляторе.

Это нормально, что используется x86_64-amd-linux-gnu-g++.exe для ссылки вместо x86_64-amd-linux-gnu-ld.exe?

ответ

0

Проблема в Windows, а не в компиляторе, а не в CMake. Вы можете больше узнать об этом here, но суть в том, что в командной строке Windows есть ограничение на 8192 символов. В принципе, вы не можете выполнить команду до 8192 символов. Команда связи, которую пыталась выполнить CMake, имеет 11353 символа, и именно поэтому она терпит неудачу с этой ошибкой.

Решение заключается в использовании другой оболочки. Как упоминалось в сообщении в блоге, вы можете загрузить GNU ARM Eclipse Build Tools с sourceforge.

После загрузки и установки только скопируйте make.exe и sh.exe из <Installation-Path>/bin туда, где ваша цепь инструментов и ссылка как босс!

Я пробовал его с различными компиляторами, qnx - gcc - cross gcc, и он отлично работает.