【发布时间】:2020-09-04 08:03:14
【问题描述】:
概述
说明 x86_64-w64-mingw32-g++ 在 OS-X 上构建共享库以在 Windows 上部署时无法包含 libstc++-6.dll、libwinpthread-1 的 SSCCE。 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 就可以正常运行。
我的库extern int add (int a, int b);
MyLib.cpp
#include "MyLib.h"
extern int add (int a, int b) {
return a + b;
}
主文件
#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 上公开,网址为:https://gitlab.com/Michael51773/mingwwindowssharedlibbug
【问题讨论】:
-
你试过简单地使用
-static吗?这应该链接所有需要的库。 -
选项
-static-libgcc -static-libstdc++不应该链接libwinpthread-1库。对我来说,如果另外两个也丢失了,编译的程序甚至不会报告libwinpthread-1库丢失。在将其他两个库与-static-libgcc -static-libstdc++链接后,您确定您不仅缺少libwinpthread-1吗? -
在 Adrian Ho 的帮助下找到了适合我的解决方案(见下文)
标签: shared-libraries cross-compiling mingw32