我知道这是一个经常被问到的问题,我已经浏览了所有的答案,但是我找不到我的问题和解决方法。
序言
使用克利永中的CygWin工具链来构建一个类似于魅力的64位C++程序。没有任何错误。然后我试着对32位做同样的事情,很快意识到这很难理解。
卡马克主义者
在这里我添加了
-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(
破碎的
CMAKE引发错误:
link
)
-
C:\cygwin64\bin\i686-pc-cygwin-cpp.exe(
破碎的
CMAKE引发错误:
链接
)
-
C:\ cygwin64\bin\i686-pc-cygwin-g++.exe(
错误
发生:
link
)
-
C:\cygwin64\bin\i686-pc-cygwin-gcc-6.4.0.exe(
破碎的
CMAKE引发错误:
链接
)
-
C:\cygwin64\bin\i686-pc-cygwin-gcc.exe(
破碎的
CMAKE引发错误:
链接
)
mingw编译器
:
-
C:\ cygwin64\bin\x86_64-w64-mingw32-C++.exe
-
C:\ cygwin64\bin\x86_64-w64-mingw32-cpp.exe(
破碎的
CMAKE引发错误:
链接
)
-
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(
无错误
)
最后一个没有抛出任何错误,但当检查.dll时
依赖关系行者
我发现所有与此相关的.dll仍然依赖于x64,因此
Error: Modules with different CPU types were found.
我现在有点累了,我真的很感激一些提示,如何让这些东西建立正确的方式。我想我已经明白了我必须带32位的库。但我真的不知道为什么。我以为工具链已经开箱即用了。
请注意,我对Windows上的C++是相当不习惯的。