Кросс-компиляция контроллера Webots

Я пытаюсь использовать MinGW для кросс-компиляции из Linux в Windows роботизированный контроллер (.exe) для Webots (программное обеспечение для моделирования).

Webots поставляет Makefile.include файл, общий для всех платформ, который подготавливает среду сборки для компиляции (необходимые зависимости):

Мой текущий make-файл, где я установил несколько переменных в соответствии с MinGW и моей установкой webots:

WEBOTS_HOME = /usr/share/webots/resources/windows_home
#WEBOTS_HOME = /usr/share/webots

RESOURCES_PATH = $(WEBOTS_HOME)/resources/projects/robots/darwin-op
SOURCES_PATH = src
SOCKET_PATH = ../../../extra/socket/src

KIN_INCLUDE = ../../lib/OPKinematics/include
KIN_LIB = ../../lib/OPKinematics/lib/libOPKinematics64.a
EXT_INCLUDE = ../../lib/include

CFLAGS = -g -Wall
INCLUDE=-I$(RESOURCES_PATH)/libraries/darwin/darwin/Framework/include -I$(RESOURCES_PATH)/include -I$(KIN_INCLUDE) -I$(EXT_INCLUDE) -I$(SOCKET_PATH)

LIBRARIES = -Wl,-Bstatic -lws2_32 -lpthread -lboost_system-mt -lboost_serialization-mt -static-libgcc -static-libstdc++ -Wl,-Bdynamic $(RESOURCES_PATH)/libraries/darwin/darwin.dll $(KIN_LIB)

CXX_SOURCES = $(SOURCES_PATH)/main.cpp $(SOURCES_PATH)/DarwinRobot.cpp $(SOURCES_PATH)/dyn_system.cpp $(SOURCES_PATH)/writefilestuff.cpp $(SOCKET_PATH)/socket_boost.cpp

#CC=x86_64-w64-mingw32-g++
CXX=x86_64-w64-mingw32-g++
EXE_EXTENSION=.exe
OSTYPE=windows
CFLAGS += -DWIN_MAKE

# ----------------------------------------------------
#
### Do not modify: this includes Webots global Makefile.include
space :=
space +=
WEBOTS_HOME_PATH=$(subst $(space),\ ,$(strip $(subst \,/,$(WEBOTS_HOME))))
include $(WEBOTS_HOME_PATH)/resources/Makefile.include

# No pre or post build rules are necessary, override the default set on Makefile.include
pre-build: ;
post-build: main-build ;
@echo $(CC)
@echo $(OSTYPE)

# ---------------------------------------------------

Кроме того, я установил Webots на свой компьютер с Windows и скопировал папку установки в папку установки на моем компьютере с Linux, чтобы я мог получить доступ к предварительно скомпилированным библиотекам Windows.

Проблема в том, что компоновщик пытается найти пару библиотек (-lController а также -lCppController, которые добавляются внутрь Makefile.include):

# linking build/release/darwin_socket.exe
x86_64-w64-mingw32-g++ -s -Wl,--enable-auto-import -o build/release/darwin_socket.exe build/release/main.o build/release/DarwinRobot.o build/release/dyn_system.o build/release/writefilestuff.o build/release/socket_boost.o -Wl,-Bstatic -lws2_32 -lpthread -lboost_system-mt -lboost_serialization-mt -static-libgcc -static-libstdc++ -Wl,-Bdynamic /usr/share/webots/resources/windows_home/resources/projects/robots/darwin-op/libraries/darwin/darwin.dll ../../lib/OPKinematics/lib/libOPKinematics64.a  -lmingw32 -B"/usr/share/webots/resources/windows_home\mingw\lib\gcc\mingw32\5.1.0" -L"/usr/share/webots/resources/windows_home/lib" -lController -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/libController.a when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/Controller.lib when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/Controller.dll when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/libController.a when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/libController.a when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/Controller.lib when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/Controller.dll when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/Controller.lib when searching for -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32 /bin/ld: cannot find -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/libCppController.a when searching for -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/CppController.dll when searching for -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/libCppController.a when searching for -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/libCppController.a when searching for -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: skipping incompatible /usr/share/webots/resources/windows_home/lib/CppController.dll when searching for -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lCppController
collect2: error: ld returned 1 exit status
/usr/share/webots/resources/windows_home/resources/Makefile.include:529: recipe for target 'build/release/darwin_socket.exe' failed
make: *** [build/release/darwin_socket.exe] Error 1

Из того, что я понял, эта проблема обычно возникает при попытке связать 32-разрядные библиотеки с 64-разрядными двоичными файлами (или наоборот), но у меня нет -m32 или же -m64 флаги на моем make-файле или на Makefile.include, Мои ОС являются 64-битными, поэтому я предполагаю, что не должно быть никаких проблем с типом библиотек.

Вместо этого я попытался использовать исходную папку установки Linux для Webots, но у меня возникают похожие проблемы:

# linking build/release/darwin_socket.exe
x86_64-w64-mingw32-g++ -s -Wl,--enable-auto-import -o build/release/darwin_socket.exe build/release/main.o build/release/DarwinRobot.o build/release/dyn_system.o build/release/writefilestuff.o build/release/socket_boost.o -Wl,-Bstatic -lws2_32 -lpthread -lboost_system-mt -lboost_serialization-mt -static-libgcc -static-libstdc++ -Wl,-Bdynamic /usr/share/webots/resources/projects/robots/darwin-op/libraries/darwin/darwin.dll ../../lib/OPKinematics/lib/libOPKinematics64.a  -lmingw32 -B"/usr/share/webots\mingw\lib\gcc\mingw32\5.1.0" -L"/usr/share/webots/lib" -lController -lCppController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lController
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lCppController
collect2: error: ld returned 1 exit status
/usr/share/webots/resources/Makefile.include:529: recipe for target 'build/release/darwin_socket.exe' failed
make: *** [build/release/darwin_socket.exe] Error 1

что довольно странно, потому что оба libController.so а также libCppController.so присутствуют внутри /usr/share/webots/lib/,

Так что же мне здесь не хватает?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]