x86_64-w64-mingw32-g ++选项-static-libgcc -static-libstdc ++在g ++中似乎已损坏 概述

问题描述

概述

一个SSCCE说明 x86_64-w64-mingw32-g ++ 在OS-X上构建共享库以在Windows上部署时,未能包含 libstc ++-6.dll,libwinpthread-1。 dll libgcc_s_seh.dll ,即使指定了选项 -static-libgcc -static-libstdc ++

如果这是mingw中的错误,那么我非常感谢知道如何报告它。

用于构建项目的命令位于bash shell脚本文件中: doit.sh

# Clean up
rm -rf *.o *.dll Main.exe winlibs

# Cross compile for the Windows shared library
GPP=/usr/local/bin/x86_64-w64-mingw32-g++
$GPP -c MyLib.cpp -o MyLib.win.o
$GPP  -shared -static-libgcc -static-libstdc++ -o MyLib.dll *.win.o

# Build Application Main.exe
$GPP  -c Main.cpp -o Main.win.o
$GPP  -o Main.exe MyLib.dll Main.win.o

程序已构建,但在Windows 10上执行该程序时,报告缺少 libstdc ++-6.dll,libgcc_s_seh-1.dll libwinpthread -1.dll。

-static-libgcc -static-libstdc ++ 对getneralted共享库没有影响。

将mingw发行版中缺少的库复制到与应用程序相同的文件夹中,以使prgram可以正常运行。

MyLib.h
extern int add (int a,int b);
MyLib.cpp
#include "MyLib.h"

extern int add (int a,int b) {
    return a + b;
}
Main.cpp
#include <iostream>  
#include "MyLib.h" 

using namespace std; 
  
int main() 
{ 
    cout << "add(51700,73)=" << add(51700,73) << endl;       
    return 0; 
} 
工具版本
| Tool                       | Version               |
|----------------------------|-----------------------|
| MacBook Pro                | OS-X Catalina 10.15.6 |
| x86_64-w64-mingw32-gcc/g++ | 9.3.0 (GCC) (download with brew install mingw-w64) |
| uname -a                   | Darwin michaels-mbp 19.6.0 Darwin Kernel Version 19.6.0: Thu Jun 18 20:49:00 PDT 2020; root:xnu-6153.141.1~1/RELEASE_X86_64 x86_64 |
GitLab URL

此项目在gitlab上的gitlab网址上公开:https://gitlab.com/Michael51773/mingwwindowssharedlibbug

解决方法

感谢Adrian Ho给我的解决方案,这只是一起使用-static和-shared选项的问题:

/usr/local/bin/x86_64-w64-mingw32-g++ -shared -static -o MyLib-static.dll MyLib/*.win.o

完整的描述可以在这里找到:https://discourse.brew.sh/t/x86-64-w64-mingw32-g-broken-options-static-libgcc-static-libstdc/8705/22