在 ubuntu 上缺少 DLL 交叉编译 wxWidgets 共享库

Missing DLLs cross-compile wxWidgets shared library on ubuntu

我尝试使用共享库在 Linux 下交叉编译为 Windows。 我按照 wxWidgets wiki 上的说明进行操作,但是在执行 main out.exe 时,我遇到了很多丢失的 DLL 错误。

以下是我构建库的方式:

../configure --disable-debug_flag --host=x86_64-w64-mingw32 --build=x86_64-linux-gnu -with-msw

这是我编译的方式 Link :

First : x86_64-w64-mingw32-g++ -c  *.cpp  *.h  $(/wxWidgets/build_win/wx-config --cxxflags)

Second : x86_64-w64-mingw32-g++ -o out.exe *.o  $(/wxWidgets/build_win/wx-config --libs) -static-libgcc -static-libstdc++

当我使用 wine out.exe 我遇到了这些错误:

002a:err:module:import_dll Library wxbase313u_gcc_custom.dll (which is needed by L"Z:\home\ubuntu\test.exe") not found
002a:err:module:import_dll Library wxmsw313u_core_gcc_custom.dll (which is needed by L"Z:\home\ubuntu\test.exe") not found
002a:err:module:attach_dlls Importing dlls for L"Z:\home\ubuntu\test.exe" failed, status c0000135

我已将丢失的 DLL 添加到与 out.exe 相同的文件夹中(它们位于 /wxWidgets/build_win/lib/ 中),这样做会增加更多错误:

wine out.exe 
0028:err:module:import_dll Library libgcc_s_seh-1.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxbase313u_gcc_custom.dll") not found
0028:err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxbase313u_gcc_custom.dll") not found
0028:err:module:import_dll Library wxbase313u_gcc_custom.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\out.exe") not found
0028:err:module:import_dll Library libgcc_s_seh-1.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxbase313u_gcc_custom.dll") not found
0028:err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxbase313u_gcc_custom.dll") not found
0028:err:module:import_dll Library wxbase313u_gcc_custom.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxmsw313u_core_gcc_custom.dll") not found
0028:err:module:import_dll Library libgcc_s_seh-1.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxmsw313u_core_gcc_custom.dll") not found
0028:err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\wxmsw313u_core_gcc_custom.dll") not found
0028:err:module:import_dll Library wxmsw313u_core_gcc_custom.dll (which is needed by L"Z:\home\ubuntu\Bureau\test\out.exe") not found
0028:err:module:attach_dlls Importing dlls for L"Z:\home\ubuntu\Bureau\test\out.exe" failed, status c0000135

这是我的文件夹内容:

ChildPanels.o                  wxmsw313u_gl_gcc_custom.dll
main.o                         wxmsw313u_html_gcc_custom.dll
MainPanel.o                    wxmsw313u_media_gcc_custom.dll
out.exe                        wxmsw313u_propgrid_gcc_custom.dll
wxbase313u_gcc_custom.dll      wxmsw313u_qa_gcc_custom.dll
wxbase313u_net_gcc_custom.dll  wxmsw313u_ribbon_gcc_custom.dll
wxbase313u_xml_gcc_custom.dll  wxmsw313u_richtext_gcc_custom.dll
wxmsw313u_adv_gcc_custom.dll   wxmsw313u_stc_gcc_custom.dll
wxmsw313u_aui_gcc_custom.dll   wxmsw313u_webview_gcc_custom.dll
wxmsw313u_core_gcc_custom.dll  wxmsw313u_xrc_gcc_custom.dll

谁能帮我解决这个问题?

编辑:

它可以将所有这些 DLL 复制到我的文件夹中:

libgcc_s_seh-1.dll  libstdc++-6.dll  libwinpthread-1.dll wxmsw313u_core_gcc_custom.dll  wxbase313u_gcc_custom.dll

我不明白为什么我需要将 libgcc 和 libstdc++ 复制到我的文件夹中,因为我 link 静态编辑了它们。 link 静态 libgcc 和 libstdc++ 以及共享 wxWidgets 是不可能的吗?

此外,我如何告诉编译器我希望我的 DLL 从名为 /lib 的文件夹加载,例如在我的应用程序文件夹中?

这实际上并不是特定于 wxWidgets 的,而只是 DLL 的工作方式:它们需要在程序执行期间找到,这意味着要么与程序本身位于同一目录中,要么位于其中一个目录中在 PATH 环境变量中。

您不能 "tell the compiler" 任何有关找到 DLL 的路径的信息,因为此路径必须在 运行 时使用,而不是 编译次.

如果您真的非常想将 DLL 放在另一个目录中,最简单的解决方法是使用包装器(它可以是脚本或其他编译程序)将此目录添加到 PATH 之前启动真正的应用程序。或者,只是 link 静态,根本不用理会 DLL。