问题标签 [mxe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - MXE 和 QT 部署会产生运行时错误
我正在Ubuntu 上构建一个运行良好的QT应用程序。现在我必须在 Windows 上部署它,所以我安装了MXE以交叉编译我的源代码。
MXE 构建
我为我的QT代码使用了一个个人库(使用cmake
)和一个客户端/服务器代码,我使用MXE编译它并没有给出任何错误(我努力修复它们......)。然后,QT的编译结束,没有任何错误。
每当我尝试执行程序(wine
在 Ubuntu 或 Windows 上)它都不起作用。wine
冻结,Windows 显示一个Runtime Error
.
我还尝试在我的可执行文件上使用windeployqt.exe
using wine
,跳跃它会给我丢失的 dll,但它告诉我:
我真的不知道什么是坏的。我忘记放 dll,还是我的编译默默地失败了?有谁知道或有关于如何处理这种情况的想法?
编辑
显然我正确编译了我的程序,错误似乎来自GetAdapterAdresse
使用 Windows 时。问题根本不是来自 MXE(我很高兴我让它工作了)。
我得看看这个功能,但有人知道如何gdb
使用MXE吗?当我运行make gdb
时,它已经构建了一些东西,但我无法弄清楚程序在哪里。
c++ - 使用交叉编译的 libpng16-16.dll 在 w10 上无法执行
我有一个问题,我使用 mxe (x86_64-w64-mingw32.shared) 在 linux 上为 windows 构建和链接一个 windows 应用程序,构建一个链接运行良好。然后我复制粘贴所有有用的 dll(除了 x64-msvcrt-ruby230.dll,我从官方 Windows 安装程序中获得之外,所有这些都是交叉编译的)。
我用 wine 测试了我的程序,没问题它就像一个魅力,我发现与 linux 版本没有区别。但是一旦我把所有东西都放在我的测试虚拟机中(windows10 64bit inside virtualbox),我会收到错误消息:
过程入口点 inflateValidate 无法位于动态链接库 D:\libpng16-16.dll 中。
libpng16-16.dll 在那里,当我对象转储它时(在 linux 中):
objdump -x libpng16-16.dll | grep 膨胀
所以显然存在 __imp_inflateValidate 符号,所以我缺少什么吗?有人知道如何解决这个问题吗?
提前致谢
c++ - 使用mingw在Linux上交叉编译的C ++程序在msys2中工作,但不能直接在Windows中
我有一个奇怪的问题。我有一个依赖于 Qt、Zlib 和 ruby 的程序,我使用 mxe (x86_64-w64-mingw32.shared) 在 ubuntu 上交叉编译。
我使用的 ruby 不包含在 mxe 包中,但已使用相同的工具链进行编译。
然后我有一个安装了 msys2 的 windows 10 64 位测试虚拟机。当我从 linux 上的 wine 或 windows 上的 msys2 运行程序时,它可以正常工作。但是当我直接从资源管理器启动它时,程序按预期启动但运行时失败ruby_setup()
(我以前使用RUBY_INIT_STACK;
过,但不是ruby_sysinit(&argc, &argv);
因为我在程序中间迷路了。
我的程序提供的 dll 列表是(以 agathe_ 为前缀表示它们由我编码,ruby 初始化在 agathe_ruby.dll 中完成):
有没有人遇到过同样的问题并且知道解决方法?
cross-compiling - 交叉构建错误:libtool:第 1112 行:lib:找不到命令
我正在尝试使用M Cross Environment从 Linux 为 Windows 交叉构建应用程序,这实际上只是一个有助于使用 Mingw-w64 工具的 makefile 系统。应用程序的构建系统是 autotools。
当我尝试构建时,我得到如下错误:
谁能解释问题是什么?
其他人在这个stackoverflow 问题中也有类似的问题,尽管他们似乎是在 Windows 上本地构建的。这里也有关于邮件列表的讨论。这些来源都没有为我对 libtool 知识有限的人提供足够的信息来解决问题(我什至不知道第 1112 行指的是什么,即第 1112 行究竟是什么,libtool 本身?这是 libtool 中的注释行)。
编辑:
我发现了以下线程:
这实际上是关于在 cygwin 上编译我正在交叉编译的同一应用程序(mbdyn,但更早的版本)。似乎问题可能是由于在源目录中配置创建 libtool 脚本。我猜这与交叉编译器 libtool 脚本或类似的东西发生冲突。
那么解决这个 libtool 问题的正确方法是什么?
c++ - MXE - 使用 cmake 和 mingw 交叉编译时对 Qt 的未定义引用
我正在尝试在 Linux 上使用MXE为 Windows编译electronpass-desktop 。我已经成功编译了它的所有依赖项(包括libelectronpass)。然后我执行(从):electronpass-desktop/build
/home/zigapk/Desktop/temp/mxe/usr/bin/i686-w64-mingw32.static-cmake -DCMAKE_PREFIX_PATH=/home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/i686-w64-mingw32.static-g++ ..
- cmake 找到库就好了make CROSS=i686-w64-mingw32.static- VERBOSE=1
- make 编译所有项目文件,但链接时出现问题:... [ 9%] 链接 CXX 可执行文件 ../../bin/electronpass.exe cd /home/zigapk/Desktop/temp/electronpass-desktop/build/app && /home/zigapk/Desktop/temp/mxe/ usr/x86_64-unknown-linux-gnu/bin/cmake -E cmake_link_script CMakeFiles/electronpass.dir/link.txt --verbose=1 /home/zigapk/Desktop/temp/mxe/usr/x86_64-unknown-linux-gnu /bin/cmake -E remove -f CMakeFiles/electronpass.dir/objects.a /home/zigapk/Desktop/temp/mxe/usr/bin/i686-w64-mingw32.static-ar cr CMakeFiles/electronpass.dir/objects .a @CMakeFiles/electronpass.dir/objects1.rsp /home/zigapk/Desktop/temp/mxe/usr/bin/i686-w64-mingw32。static-g++ -std=c++0x -fno-operator-names -fno-exceptions -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef -Wnon -virtual-dtor -Woverloaded-virtual -Werror=return-type -std=c++11 -Wall -Wextra -Wold-style-cast -pedantic -O3 -DNDEBUG -mwindows -Wl,--whole-archive CMakeFiles/electronpass .dir/objects.a -Wl,--no-whole-archive -o ../../bin/electronpass.exe -Wl,--out-imlib,../lib/libelectronpass.dll.a -Wl ,--major-image-version,0,--minor-image-version,0 @CMakeFiles/electronpass.dir/linklibs.rsp /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static /qt5/lib/libQt5Core.a(qregularexpression.o):qregularexpression.cpp:(.text+0x2b0): 未定义对“pcre2_match_16”的引用 ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64 -mingw32.static/qt5/lib/libQt5Core.a(qregularexpression.o):qregularexpression.cpp:(.text+0x335): undefined reference to 'pcre2_jit_stack_create_16' ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qglobal .o):qglobal.cpp:(.text+0x22a): 未定义引用'_imp__WSACleanup@0' ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib /libQt5Core.a(qeventdispatcher_win.o):qeventdispatcher_win.cpp:(.text+0x1bce): 未定义引用 '_imp__timeSetEvent@20' ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32 .static/qt5/lib/libQt5Core.a(qcoreapplication_win.o):qcoreapplication_win.cpp:(.text+0x336):未定义对“GetFileVersionInfoSizeW@8”的引用 ... /home/zigapk/Desktop/temp/mxe/usr /i686-w64-mingw32.static/qt5/lib/libQt5Network.a(qsslsocket_openssl_symbols.o):qsslsocket_openssl_symbols.cpp:(.text+0x6a1):未定义对“SSL_load_error_strings”的引用 ... ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Network.a(qnativesocketengine_win.o):qnativesocketengine_win .cpp:(.text+0x181d): 未定义引用'_imp__WSAGetLastError@0' ... ... ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/ lib/libQt5Gui.a(qzip.o):qzip.cpp:(.text+0x27c3): 未定义对“deflateEnd”的引用 /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5 /lib/libQt5Gui.a(qzip.o):qzip.cpp:(.text+0x2870): undefined reference to 'deflateEnd' collect2: error: ld returned 1 exit status make未定义对 '_imp__WSAGetLastError@0' 的引用 ... ... ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a(qzip.o) :qzip.cpp:(.text+0x27c3): 未定义对“deflateEnd”的引用 /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a(qzip.o ):qzip.cpp:(.text+0x2870): undefined reference to 'deflateEnd' collect2: error: ld returned 1 exit status make未定义对 '_imp__WSAGetLastError@0' 的引用 ... ... ... /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a(qzip.o) :qzip.cpp:(.text+0x27c3): 未定义对“deflateEnd”的引用 /home/zigapk/Desktop/temp/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a(qzip.o ):qzip.cpp:(.text+0x2870): undefined reference to 'deflateEnd' collect2: error: ld returned 1 exit status make2:* [app/CMakeFiles/electronpass.dir/build.make:623: ../bin/electronpass.exe] 错误 1 make 2:离开目录 '/home/zigapk/Desktop/temp/electronpass-desktop/build' make 1 : * [CMakeFiles/Makefile2:119: app/CMakeFiles/electronpass.dir/all] 错误 2 make 1 : 离开目录 '/home/zigapk/Desktop/temp/electronpass-desktop/build' make: *** [ Makefile:139:全部]错误2
链接到整个输出:https ://pastebin.com/v3TiQGk2
如果有人能提供任何有用的信息,我将不胜感激,因为在过去的两周里,我一直在用头撞墙。
先感谢您
cross-compiling - MXE 交叉编译链接到系统 libltdl.so 以及 mxe 包版本
我正在尝试使用M Cross Environment从 Linux 为 Windows 交叉构建应用程序,这实际上只是一个有助于使用 Mingw-w64 工具的 makefile 系统。应用程序的构建系统是 autotools。
该项目链接到libltdt,但在程序的最终链接命令中,系统 libltdt.so 和交叉编译的 mxe 版本的 libltdt
我是这样配置的:
./configure --host=x86_64-w64-mingw32.static CXXFLAGS="-D_P_WAIT=0 -static -static-libgcc -static-libstdc++" CFLAGS="-D_P_WAIT=0" --enable-static --disable-shared
我收到如下错误
在最后一个命令中有几个-L
条目,如-L/usr/lib/x86_64-linux-gnu
它还明确链接到/usr/lib/x86_64-linux-gnu/libltdl.so
但我实际上只想链接到,/opt/mxe/usr/x86_64-w64-mingw32.static/lib/libltdl.a
这也在命令中指定。
如果我删除-L
不指向 mxe 工具目录的条目以及对libltdl.so
手动的引用和运行命令,这将成功完成并生成可执行文件 ,mbdyn.exe
并在 Windows 机器上运行。
这是 MXE 的问题,还是我做错了什么?我该如何解决这个问题。
c++ - 各种库的 C++ 从 Linux 到 Windows 的交叉编译问题
我正在尝试使用 MXE/MinGW 将一些 c++ 代码从 Linux 交叉编译到 Windows,但遇到了一些错误:
以下是我用来编译代码的 bash 命令:
我将尝试解释该命令应该做什么:第一行是来自 MinGW 的 gcc 编译器,然后是要编译的源文件。下一行应该链接各种库的 MXE 包含和 lib 目录。之后是包含实际库的“-l”标志。我需要的库是 boost、Qt5、fftw、eigen 和 hdf5。
我还将包含用于编译 Linux 代码的 bash 命令,该命令可以正常工作:
根据我从错误消息中了解到的情况,问题在于没有正确包含 Qt5 和 hdf5 库(这确实是问题吗?)。
我在 Google 上搜索了类似的问题,听起来这些库的顺序不正确。我尝试移动“-lQt*”和“-lhdf5*”标志,但我一直收到同样的错误。我还验证了所有库都安装在 MXE 中,并且所有库的库和头文件(.a 和 .h)都存在于包含的目录中。
如何解决错误消息?我对错误发生原因的理解是否正确?
c++ - 如何交叉编译在 Linux for Linux 和 Linux for Windows 中编译的程序?
我正在尝试编译一个我没有编写的程序。它可以使用以下命令在 Ubuntu 16.04 中为 Ubuntu 16.04 编译。
qmake
制作
有没有一种简单的方法可以通过操作这些命令为 Windows 32 位或 64 位交叉编译它,而无需对编程进行任何更改?它也意味着能够为 Windows 编译。我已经尝试了无数关于如何使用各种库执行此操作的变体,但都不起作用,似乎是由于说明中缺少步骤(或者我猜是这样)。
编辑:该程序使用 C++。
编辑:我也在尝试使用 MXE。
c++ - Docker 容器中的 MXE Qt5 应用程序构建失败
因此,我已经make qt5
在 Docker 容器(基于 Ubuntu 18.04)中成功构建了 MXE 和 Qt5 ( ),并将这些内容复制到/opt/mxe
并附加PATH
了/opt/mxe/usr/bin
.
但是,当我尝试在容器内构建我的 Qt5 应用程序时,它会因 qmake 和 CMake 而失败。由于某种原因,Qt 工具无法正常工作。这是 qmake 的输出:
资源编译器找不到任何东西。
CMake 构建失败如下:
让我们检查一下容器内的 Qt 配置:
似乎还可以。
当然,我的应用程序在有或没有 MXE 以及 qmake 和 CMake 的情况下都能在我的主机上完美编译。
有任何想法吗?
windows - MXE + CMake:如何在 Windows 上部署静态链接的 Qt 应用程序?
我已经将我的 Qt 应用程序与Ubuntu 上MXE
的静态链接进行了交叉编译。Qt 5.11
我正在使用 MXE 的CMake
包装器。
当我尝试在实际的 Windows 机器上运行我的应用程序时,我得到:"This application failed to start because no Qt platform plugin could be initialized."
Qt 部署说明并没有直接说明静态链接的 Qt 是如何进行的。
编辑:似乎最简单的方法是使用 QMake,因为 CMake 和静态 Qt5 存在一些问题 :(