首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在x86 Windows上使用CMake、Ninja和Clang构建一个x64应用程序

在x86 Windows上使用CMake、Ninja和Clang构建一个x64应用程序
EN

Stack Overflow用户
提问于 2017-11-30 20:10:21
回答 1查看 5.8K关注 0票数 3

我想在我的x86 Windows机器上构建一个x64 Windows应用程序。

我使用CMake、Ninja、clang、link和VS构建工具2017,并使用以下CMakeLists

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.9)
project(Test CXX)

add_library(TestLib STATIC "")
target_include_directories(TestLib
  PUBLIC
TestLib/inc
)
target_sources(TestLib
  PRIVATE
    TestLib/src/Flop.cpp
    TestLib/src/testClass.cpp
)

add_executable(Test "")
target_sources(Test
  PRIVATE
    src/main.cpp
)
target_link_libraries(Test
  TestLib
)

我的设置对x64应用程序很好。我用vcvars64初始化构建环境,然后用

代码语言:javascript
运行
复制
cmake -G Ninja -DCMAKE_CXX_COMPILER:PATH="C:\MeineProgramme\LLVM\bin\clang-cl.exe" -DCMAKE_LINKER:PATH="C:\MeineProgramme\LLVM\bin\lld-link.exe"

这导致完美的忍者构建文件,并产生一个功能的可执行文件。

如果我想构建一个x86应用程序,CMake会失败,以检测生成环境。我用vcvars32vcvarsamd64_x86初始化构建环境,并使用上面的命令调用CMake。这将导致在检测生成环境时出现错误。

CMake错误日志有以下内容

代码语言:javascript
运行
复制
Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler: C:/MeineProgramme/LLVM/bin/clang-cl.exe 
Build flags: 
Id flags:  

The output was:
1120
LINK : error LNK2001: Nicht aufgelöstes externes Symbol "mainCRTStartup".
C:\MeineProgramme\Visual_Studio\2017\BuildTools\VC\Tools\MSVC\14.11.25503\lib\x86\libcmt.lib : warning LNK4272:Bibliothekcomputertyp "x86" steht in Konflikt mit dem Zielcomputertyp "x64"
CMakeCXXCompilerId.exe : fatal error LNK1120: 1 nicht aufgelöste Externe
clang-cl.exe: error: linker command failed with exit code 1120 (use -v to see invocation)


Determining if the CXX compiler works failed with the following output:
Change Dir: D:/Dateien/Downloads/Test/build/CMakeFiles/CMakeTmp

Run Build Command:"C:/MeineProgramme/Ninja/bin/ninja.exe" "cmTC_e2ed5"
[1/2] Building CXX object CMakeFiles\cmTC_e2ed5.dir\testCXXCompiler.cxx.obj

[2/2] Linking CXX executable cmTC_e2ed5.exe

FAILED: cmTC_e2ed5.exe 

cmd.exe /C "cd . && C:\MeineProgramme\CMake\bin\cmake.exe -E vs_link_exe --intdir=CMakeFiles\cmTC_e2ed5.dir --manifests  -- C:\MeineProgramme\LLVM\bin\lld-link.exe /nologo CMakeFiles\cmTC_e2ed5.dir\testCXXCompiler.cxx.obj  /out:cmTC_e2ed5.exe /implib:cmTC_e2ed5.lib /pdb:cmTC_e2ed5.pdb /version:0.0  /machine:x64  /debug /INCREMENTAL /subsystem:console  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."

LINK Pass 1: command "C:\MeineProgramme\LLVM\bin\lld-link.exe /nologo CMakeFiles\cmTC_e2ed5.dir\testCXXCompiler.cxx.obj /out:cmTC_e2ed5.exe /implib:cmTC_e2ed5.lib /pdb:cmTC_e2ed5.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:CMakeFiles\cmTC_e2ed5.dir/intermediate.manifest CMakeFiles\cmTC_e2ed5.dir/manifest.res" failed (exit code 1) with the following output:
C:\MeineProgramme\LLVM\bin\lld-link.exe: warning: <root>: undefined symbol: mainCRTStartup

error: link failed

ninja: build stopped: subcommand failed.

据我所知,问题是CMake将/machine:x64传递给链接器。

为了解决这个问题,我应该对CMake调用或CMakeLists做哪些修改?

任何帮助都是非常感谢的。谢谢各位:-)

EN

Stack Overflow用户

回答已采纳

发布于 2017-11-30 21:44:53

CMake问题#16259:"Ninja生成器与clang混合使用64/32位clang和Visual环境时失败“建议使用环境变量:

Ninja生成器要求已经为编译器配置了环境以生成所需的目标。你需要做设置CC=clang-cl >set CFLAGS=-m32 >set CXX=clang-cl >set CXXFLAGS=-m32 告诉CMake如何为所需的目标调用编译器。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47581784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档