c++ - 为什么我的 32 位 Fortran/C DLL 不能在 MSYS2 中编译?

标签 c++ dll fortran mingw msys2

我正在尝试使用 gcc (5.3.0) 在 MSYS2 (msys2-x86_64-20160205) 中的 64 位 Windows 7 上使用混合 Fortran/C 代码编译 DLL。我想编译它 32 位。 (如果我省略 -m32 标志并将其编译为 64 位,它工作得很好。)

像我一样对这类事情缺乏经验,我可能会犯一些非常愚蠢的错误......所以我提前道歉!

我似乎遇到的砖墙如下。

我已经成功(我认为)安装了 32 位工具链,但是当我运行我的 Makefile 时,它​​似乎找不到它。

谁能帮我指明正确的方向?

我写得不好的 Makefile:

FC=gfortran -g -m32
CC=g++ -g -m32

DLL_SRC_DIR=.
BUILD_DIR=build

all:
    $(FC) -c $(DLL_SRC_DIR)/fdll.f90 -o $(BUILD_DIR)/fdll.o

    $(CC) -c -DBUILDING_C_DLL $(DLL_SRC_DIR)/cdll.cpp -o $(BUILD_DIR)/cdll.o
    $(CC) -shared -o $(BUILD_DIR)/libcdll.dll $(BUILD_DIR)/cdll.o $(BUILD_DIR)/fdll.o -Wl,--out-implib,$(BUILD_DIR)/libcdll.a,--output-def,$(BUILD_DIR)/libcdll.def -lgfortran
    /c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 12.0/VC/BIN/lib /MACHINE:x86 /DEF:$(BUILD_DIR)\\libcdll.def /OUT:$(BUILD_DIR)\\libcdll.lib

clean:
    rm -f $(BUILD_DIR)/*

运行make:

$ make
gfortran -g -m32 -c ./fdll.f90 -o build/fdll.o
g++ -g -m32 -c -DBUILDING_C_DLL ./cdll.cpp -o build/cdll.o
g++ -g -m32 -shared -o build/libcdll.dll build/cdll.o build/fdll.o -Wl,--out-implib,build/libcdll.a,--output-def,build/libcdll.def -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgfortran.dll.a when searching for -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgfortran.a when searching for -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgfortran.a when searching for -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgfortran.dll.a when searching for -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgfortran.a when searching for -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lgfortran
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libstdc++.dll.a when searching for -lstdc++
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libstdc++.a when searching for -lstdc++
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libstdc++.a when searching for -lstdc++
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libstdc++.dll.a when searching for -lstdc++
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libstdc++.a when searching for -lstdc++
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lstdc++
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lmsys-2.0
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libadvapi32.a when searching for -ladvapi32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libadvapi32.a when searching for -ladvapi32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libadvapi32.a when searching for -ladvapi32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -ladvapi32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libshell32.a when searching for -lshell32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libshell32.a when searching for -lshell32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libshell32.a when searching for -lshell32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lshell32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libuser32.a when searching for -luser32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libuser32.a when searching for -luser32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libuser32.a when searching for -luser32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -luser32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libkernel32.a when searching for -lkernel32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libkernel32.a when searching for -lkernel32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/w32api/libkernel32.a when searching for -lkernel32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lkernel32
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc_s.dll.a when searching for -lgcc_s
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lgcc_s
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-msys/5.3.0/libgcc.a when searching for -lgcc
/usr/lib/gcc/x86_64-pc-msys/5.3.0/../../../../x86_64-pc-msys/bin/ld: cannot find -lgcc
collect2: error: ld returned 1 exit status
make: *** [Makefile:12: all] Error 1

安装 32 位工具链:

$ pacman -S mingw-w64-i686-toolchain
:: There are 16 members in group mingw-w64-i686-toolchain:
:: Repository mingw32
   1) mingw-w64-i686-binutils  2) mingw-w64-i686-crt-git  3) mingw-w64-i686-gcc  4) mingw-w64-i686-gcc-ada  5) mingw-w64-i686-gcc-fortran  6) mingw-w64-i686-gcc-libgfortran  7) mingw-w64-i686-gcc-libs  8) mingw-w64-i686-gcc-objc  9) mingw-w64-i686-gdb
   10) mingw-w64-i686-headers-git  11) mingw-w64-i686-libmangle-git  12) mingw-w64-i686-libwinpthread-git  13) mingw-w64-i686-make  14) mingw-w64-i686-pkg-config  15) mingw-w64-i686-tools-git  16) mingw-w64-i686-winpthreads-git

Enter a selection (default=all):
resolving dependencies...
looking for conflicting packages...
warning: dependency cycle detected:
warning: mingw-w64-i686-gcc-libgfortran will be installed before its mingw-w64-i686-gcc-libs dependency

Packages (40) mingw-w64-i686-bzip2-1.0.6-5  mingw-w64-i686-ca-certificates-20150426-2  mingw-w64-i686-expat-2.1.1-1  mingw-w64-i686-gdbm-1.12-1  mingw-w64-i686-gettext-0.19.7-1  mingw-w64-i686-gmp-6.1.0-1  mingw-w64-i686-isl-0.16.1-1  mingw-w64-i686-libffi-3.2.1-3
              mingw-w64-i686-libiconv-1.14-5  mingw-w64-i686-libsystre-1.0.1-2  mingw-w64-i686-libtasn1-4.8-1  mingw-w64-i686-libtre-git-r122.c2f5d13-4  mingw-w64-i686-mpc-1.0.3-2  mingw-w64-i686-mpfr-3.1.4-3  mingw-w64-i686-ncurses-6.0.20160220-2
              mingw-w64-i686-openssl-1.0.2.h-1  mingw-w64-i686-p11-kit-0.23.2-2  mingw-w64-i686-python2-2.7.11-4  mingw-w64-i686-readline-6.3.008-1  mingw-w64-i686-tcl-8.6.5-1  mingw-w64-i686-termcap-1.3.1-2  mingw-w64-i686-tk-8.6.5-1
              mingw-w64-i686-windows-default-manifest-6.4-2  mingw-w64-i686-zlib-1.2.8-9  mingw-w64-i686-binutils-2.25.1-5  mingw-w64-i686-crt-git-5.0.0.4680.362c947-1  mingw-w64-i686-gcc-5.4.0-1  mingw-w64-i686-gcc-ada-5.4.0-1  mingw-w64-i686-gcc-fortran-5.4.0-1
              mingw-w64-i686-gcc-libgfortran-5.4.0-1  mingw-w64-i686-gcc-libs-5.4.0-1  mingw-w64-i686-gcc-objc-5.4.0-1  mingw-w64-i686-gdb-7.11.1-2  mingw-w64-i686-headers-git-5.0.0.4680.362c947-1  mingw-w64-i686-libmangle-git-5.0.0.4669.7de6266-1
              mingw-w64-i686-libwinpthread-git-5.0.0.4670.00cda6f-1  mingw-w64-i686-make-4.1.2351.a80a8b8-1  mingw-w64-i686-pkg-config-0.29.1-1  mingw-w64-i686-tools-git-5.0.0.4669.7de6266-1  mingw-w64-i686-winpthreads-git-5.0.0.4670.00cda6f-1

Total Installed Size:  619.73 MiB

:: Proceed with installation? [Y/n] Y
(40/40) checking keys in keyring                                                                                                                                   [####################################################################################################] 100%
(40/40) checking package integrity                                                                                                                                 [####################################################################################################] 100%
(40/40) loading package files                                                                                                                                      [####################################################################################################] 100%
(40/40) checking for file conflicts                                                                                                                                [####################################################################################################] 100%
(40/40) checking available disk space                                                                                                                              [####################################################################################################] 100%
:: Processing package changes...
( 1/40) installing mingw-w64-i686-libiconv                                                                                                                         [####################################################################################################] 100%
( 2/40) installing mingw-w64-i686-gmp                                                                                                                              [####################################################################################################] 100%
( 3/40) installing mingw-w64-i686-libwinpthread-git                                                                                                                [####################################################################################################] 100%
( 4/40) installing mingw-w64-i686-gcc-libgfortran                                                                                                                  [####################################################################################################] 100%
( 5/40) installing mingw-w64-i686-gcc-libs                                                                                                                         [####################################################################################################] 100%
( 6/40) installing mingw-w64-i686-bzip2                                                                                                                            [####################################################################################################] 100%
( 7/40) installing mingw-w64-i686-zlib                                                                                                                             [####################################################################################################] 100%
( 8/40) installing mingw-w64-i686-binutils                                                                                                                         [####################################################################################################] 100%
( 9/40) installing mingw-w64-i686-headers-git                                                                                                                      [####################################################################################################] 100%
(10/40) installing mingw-w64-i686-crt-git                                                                                                                          [####################################################################################################] 100%
(11/40) installing mingw-w64-i686-isl                                                                                                                              [####################################################################################################] 100%
(12/40) installing mingw-w64-i686-mpfr                                                                                                                             [####################################################################################################] 100%
(13/40) installing mingw-w64-i686-mpc                                                                                                                              [####################################################################################################] 100%
(14/40) installing mingw-w64-i686-windows-default-manifest                                                                                                         [####################################################################################################] 100%
(15/40) installing mingw-w64-i686-winpthreads-git                                                                                                                  [####################################################################################################] 100%
(16/40) installing mingw-w64-i686-gcc                                                                                                                              [####################################################################################################] 100%
(17/40) installing mingw-w64-i686-gcc-ada                                                                                                                          [####################################################################################################] 100%
(18/40) installing mingw-w64-i686-gcc-fortran                                                                                                                      [####################################################################################################] 100%
(19/40) installing mingw-w64-i686-gcc-objc                                                                                                                         [####################################################################################################] 100%
(20/40) installing mingw-w64-i686-expat                                                                                                                            [####################################################################################################] 100%
(21/40) installing mingw-w64-i686-gettext                                                                                                                          [####################################################################################################] 100%
(22/40) installing mingw-w64-i686-gdbm                                                                                                                             [####################################################################################################] 100%
(23/40) installing mingw-w64-i686-libffi                                                                                                                           [####################################################################################################] 100%
(24/40) installing mingw-w64-i686-libtre-git                                                                                                                       [####################################################################################################] 100%
(25/40) installing mingw-w64-i686-libsystre                                                                                                                        [####################################################################################################] 100%
(26/40) installing mingw-w64-i686-ncurses                                                                                                                          [####################################################################################################] 100%
(27/40) installing mingw-w64-i686-libtasn1                                                                                                                         [####################################################################################################] 100%
(28/40) installing mingw-w64-i686-p11-kit                                                                                                                          [####################################################################################################] 100%
(29/40) installing mingw-w64-i686-ca-certificates                                                                                                                  [####################################################################################################] 100%
(30/40) installing mingw-w64-i686-openssl                                                                                                                          [####################################################################################################] 100%
(31/40) installing mingw-w64-i686-termcap                                                                                                                          [####################################################################################################] 100%
(32/40) installing mingw-w64-i686-readline                                                                                                                         [####################################################################################################] 100%
(33/40) installing mingw-w64-i686-tcl                                                                                                                              [####################################################################################################] 100%
(34/40) installing mingw-w64-i686-tk                                                                                                                               [####################################################################################################] 100%
(35/40) installing mingw-w64-i686-python2                                                                                                                          [####################################################################################################] 100%
(36/40) installing mingw-w64-i686-gdb                                                                                                                              [####################################################################################################] 100%
(37/40) installing mingw-w64-i686-libmangle-git                                                                                                                    [####################################################################################################] 100%
(38/40) installing mingw-w64-i686-make                                                                                                                             [####################################################################################################] 100%
(39/40) installing mingw-w64-i686-pkg-config                                                                                                                       [####################################################################################################] 100%
(40/40) installing mingw-w64-i686-tools-git                                                                                                                        [####################################################################################################] 100%

最佳答案

似乎没有人愿意发布我们在问题评论中得出的答案,所以我发布它只是为了解决问题。

我需要使用 C:\msys64\mingw32.exe 可执行文件启动 shell。有关详细信息,请参阅评论。

关于c++ - 为什么我的 32 位 Fortran/C DLL 不能在 MSYS2 中编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40025754/

相关文章:

c++ - c/c++ boost - 编译问题

c++ - 存在导出时导入库不构建

c# - DLL 中的 Unity C# 脚本

vim 使用配色方案文件向语法关键字添加新元素?

从 C 代码调用 Fortran 子例程

c++ - 条件赋值

c++ - 使用 MatGeoLib 进行 3D 碰撞检测?

c++ - 在共享项目中包含代码仅在选择 x64 平台时有效

c++ - Matlab:dll 的 C++ 头文件

c - 将 Torvalds 的 "Good Taste"应用于 Fortran 链表