Отсутствующие библиотеки кросс-компиляции общей библиотеки wxWidgets в Ubuntu - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь выполнить кросс-компиляцию под Linux до Windows, используя общую библиотеку. Я следовал инструкциям на wxWidgets wiki, но при выполнении main out.exe я получил много недостающих ошибок DLL.

Вот как я собрал библиотеку:

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

Вот как я компилирую и Ссылка:

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

Я не понимаю, почему мне нужно скопировать libg cc и libstdc ++ в мою папку, потому что я связал их статически. Разве нельзя связать stati c libg cc и libstdc ++ и общие wxWidgets?

Кроме того, как я могу сказать компилятору, что я хочу, чтобы мои DLL загружались из папки с именем / lib, например, внутри папка моего приложения?

1 Ответ

0 голосов
/ 02 марта 2020

Это на самом деле не wxWidgets-специфицированный c, а просто способ работы DLL: их нужно найти во время выполнения программы, а это означает, что они находятся либо в том же каталоге, что и сама программа, либо в одном из каталоги в переменной среды PATH.

Вы не можете "сообщить компилятору" что-либо о пути, где находятся библиотеки DLL, потому что этот путь должен использоваться во время выполнения , а не компиляция время.

Самый простой обходной путь, если вы действительно, действительно хотите иметь библиотеки DLL в другом каталоге, - это использовать оболочку (это может быть скрипт или другая скомпилированная программа), которая добавит этот каталог до PATH до запуска реального приложения. В качестве альтернативы, просто статически связывайте и вообще не связывайтесь с DLL.

...