问题描述
概述
一个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.hextern 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