在 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。
我尝试使用共享库在 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。