【发布时间】:2018-11-14 11:25:19
【问题描述】:
我知道这是一个经常被问到的问题,我确实已经浏览了所有答案,但我也找不到我的问题和解决方案。
前言
使用 CLion 中的 Cygwin 工具链来构建 64 位 C++ 程序非常棒。没有错误或任何错误。然后我尝试对 32 位做同样的事情,并很快意识到这很难理解。
CMakeList
在这里,我将-m32 标志添加到已经工作的CMakeLists.txt
# cmake_minimum_required(VERSION <specify CMake version here>)
project(my_program)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS -m32)
add_library(my_program SHARED library.cpp)
然后我使用 CygWin 下载了大量的 c++ 编译器,以确保我至少有一个可以工作。
这是我为 32 位构建配置它的方式
这样做之后CMake 正在重建构建文件,然后我开始编译项目。
出现以下错误消息(被截断,因为它们实际上都是相同的,但具有无法找到的不同“缺失”库)
C:\Users\xetra11\.CLion2018.2\system\cygwin_cmake\bin\cmake.exe --build /cygdrive/c/Development/Github/CoopR-HQ-Extension/cmake-build-default --target all -- -j 10
[ 50%] Linking CXX shared library cygCoopR_HQ_Extension.dll
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0//libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0//libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0//libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/7.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-cygwin/7.3.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lgcc
使用的 C++ 编译器 这些是我尝试使用的编译器。它们都产生略有不同的错误消息,但都统一在没有找到库的咆哮中
Cygwin 编译器:
- C:\cygwin64\bin\x86_64-pc-cygwin-gcc.exe(这里使用的那个 问题)
- C:\cygwin64\bin\x86_64-pc-cygwin-gcc-7.3.0.exe
- C:\cygwin64\bin\x86_64-pc-cygwin-g++.exe
- C:\cygwin64\bin\x86_64-pc-cygwin-c++.exe
- C:\cygwin64\bin\i686-pc-cygwin-c++.exe(broken CMake 抛出错误:link)
- C:\cygwin64\bin\i686-pc-cygwin-cpp.exe(broken CMake 抛出错误:link)
- C:\cygwin64\bin\i686-pc-cygwin-g++.exe(错误发生:link)
- C:\cygwin64\bin\i686-pc-cygwin-gcc-6.4.0.exe(broken CMake 抛出错误:link)
- C:\cygwin64\bin\i686-pc-cygwin-gcc.exe(broken CMake 抛出错误:link)
MinGW 编译器:
- C:\cygwin64\bin\x86_64-w64-mingw32-c++.exe
- C:\cygwin64\bin\x86_64-w64-mingw32-cpp.exe(broken CMake 抛出错误:link)
- C:\cygwin64\bin\x86_64-w64-mingw32-g++.exe
- C:\cygwin64\bin\x86_64-w64-mingw32-gcc-6.4.0.exe
- C:\cygwin64\bin\x86_64-w64-mingw32-gcc.exe
- C:\cygwin64\bin\i686-w64-mingw32-c++.exe(没有错误)
最后一个没有抛出任何错误,但是当使用 Dependency Walker 检查 .DLL 时,我发现所有链接到此的 .DLL 仍然依赖 x64,因此 Error: Modules with different CPU types were found.
我现在有点累了,真的很感激一些提示,如何让这些东西以正确的方式构建。我已经认为我理解了我必须引入 32 位库的事实。但我真的不知道如何以及为什么。我假设工具链开箱即用。
请注意,我不太习惯在 Windows 上使用 C++。
【问题讨论】:
标签: c++ windows-10 cygwin clion 32-bit