Здравствуйте. В работе с Linux я еще новичок, пришлось столкнуться с ним во время работы. Постараюсь изложить проблему наиболее понятно.
Стоит задача реализовать соединение клиент/сервер по протоколу МЭК 61850. Для решения этой задачи я использовал библиотеку libiec61850. Мне необходимо собрать библиотеку для компиляции программы под Linux ARM процессор. Есть встраиваемый компьютер MOXA IA240-LX с процессором х86 MOXA ART ARM9. Для кросс-компиляции установлен tool-chain arm_linux_1.3 с диска, который был в комплекте с MOXA.
На офф. сайте библиотеки (http://libiec61850.com/libiec61850/documentation/building-the-library/) написано, что для сборки под ARM необходимо собрать make с TARGET=LINUX-ARM, однако есть ошибки:
make: arm-linux-gnueabi-gcc: Команда не найдена Makefile:152: ошибка выполнения рецепта для цели «build-arm/src/mms/iso_acse/acse.o» make: ***[build-arm/src/mms/iso_acse/acse.o] Ошибка 127
С сайта:
To cross-compile for ARM Linux you can call make TARGET=LINUX-ARM. It is assumed that a proper GCC cross-compiler toolchain (like MinGW or arm-linux-gcc) is installed. Probably you need to adjust the toolchain prefix variables in the file make/target_system.mk.
Как я понял, что если не собирается, то необходимо ввести поправки в файле make/target_system.mk. В работе с make файлами я полный ноль.
Если есть кто-нибудь, кто уже работал с этой библиотекой, то очень прошу помощи. На Windows в Visual Studio у меня все работает, необходимо только запустить все это дело на MOXA компьютере. Спасибо.
P.S. Вот сам make файл:
UNAME := $(shell uname)
MIPSEL_TOOLCHAIN_PREFIX=mipsel-openwrt-linux- # ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabihf- #ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabi- #ARM_TOOLCHAIN_PREFIX=arm-poky-linux-gnueabi- ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabi- UCLINUX_ARM_TOOLCHAIN_PREFIX=arm-uclinux-elf- MINGW_TOOLCHAIN_PREFIX=i586-mingw32msvc- #MINGW_TOOLCHAIN_PREFIX=x86_64-w64-mingw32- MINGW64_TOOLCHAIN_PREFIX=x86_64-w64-mingw32-
#POWERPC_TOOLCHAIN_PREFIX=powerpc-poky-linux- POWERPC_TOOLCHAIN_PREFIX=powerpc-linux-gnu-
ifndef TARGET ifeq ($(UNAME), Linux) TARGET=POSIX else ifeq ($(findstring MINGW,$(UNAME)), MINGW) TARGET=WIN32 else ifeq ($(UNAME), Darwin) TARGET=BSD else ifeq ($(UNAME), FreeBSD) TARGET=BSD endif endif
ifeq ($(TARGET), WIN32) WINDOWS=1 endif
ifeq ($(TARGET), WIN64) WINDOWS=1 endif
ifdef WINDOWS ifeq ($(UNAME), Linux) ifeq ($(TARGET), WIN32) TOOLCHAIN_PREFIX=$(MINGW_TOOLCHAIN_PREFIX) endif ifeq ($(TARGET), WIN64) TOOLCHAIN_PREFIX=$(MINGW64_TOOLCHAIN_PREFIX) endif else TOOLCHAIN_PREFIX= endif endif
ifeq ($(TARGET), LINUX-POWERPC) TOOLCHAIN_PREFIX=$(POWERPC_TOOLCHAIN_PREFIX) endif
ifeq ($(TARGET), LINUX-MIPSEL) TOOLCHAIN_PREFIX=$(MIPSEL_TOOLCHAIN_PREFIX) endif
ifeq ($(TARGET), LINUX-ARM) TOOLCHAIN_PREFIX=$(ARM_TOOLCHAIN_PREFIX) endif
ifeq ($(TARGET), UCLINUX-WAGO) TOOLCHAIN_PREFIX=$(UCLINUX_ARM_TOOLCHAIN_PREFIX) CFLAGS += -msoft-float CFLAGS += -Wall CFLAGS += -DEMBED CFLAGS += -Dlinux -D__linux__ -Dunix CFLAGS += -D__uClinux__ CFLAGS += -DTARGET=UCLINUX-WAGO LDFLAGS += -Wl,-move-rodata -Wl,-elf2flt endif
ifdef WINDOWS HAL_IMPL = WIN32 LIB_OBJS_DIR = $(LIBIEC_HOME)/build_win32 CFLAGS=-g -DWIN32
ifeq ($(TARGET), WIN32) CFLAGS+=-m32 endif
ifeq ($(TARGET), WIN64) CFLAGS+=-m64 endif
LDLIBS=-lws2_32 DYNLIB_LDFLAGS=-Wl,-no-undefined -Wl,--enable-runtime-pseudo-reloc -Wl,--output-def,libiec61850.def,--out-implib,libiec61850.a
# on Windows: only compile with ethernet support if winpcap files are in third_party/winpcap! ifneq (, $(wildcard $(LIBIEC_HOME)/third_party/winpcap/Include/.))
ifeq ($(TARGET), WIN64) LDFLAGS += -L$(LIBIEC_HOME)/third_party/winpcap/Lib/x64 else LDFLAGS += -L$(LIBIEC_HOME)/third_party/winpcap/Lib endif
LDLIBS+=-liphlpapi -lwpcap else $(warning winpcap not found - will build without GOOSE support!) CFLAGS += -DEXCLUDE_ETHERNET_WINDOWS EXCLUDE_ETHERNET_WINDOWS = 1 endif
else ifeq ($(TARGET), BSD) HAL_IMPL = BSD else HAL_IMPL = POSIX endif
LDLIBS = -lpthread
ifeq ($(TARGET), LINUX-MIPSEL) LIB_OBJS_DIR = $(LIBIEC_HOME)/build-mipsel else ifeq ($(TARGET), LINUX-ARM) LIB_OBJS_DIR = $(LIBIEC_HOME)/build-arm else ifeq ($(TARGET), UCLINUX-WAGO) LIB_OBJS_DIR = $(LIBIEC_HOME)/build-wago CFLAGS += -DTARGET_SYSTEM_UCLINUX_WAGO else ifeq ($(TARGET), LINUX-POWERPC) LIB_OBJS_DIR = $(LIBIEC_HOME)/build-powerpc else LIB_OBJS_DIR = $(LIBIEC_HOME)/build endif
CFLAGS += -g #CFLAGS += -Os
DYNLIB_LDFLAGS=-lpthread endif
ifneq ($(TARGET), CLANG-CHECK) CC=$(TOOLCHAIN_PREFIX)gcc CPP=$(TOOLCHAIN_PREFIX)g++ endif
ifeq ($(TARGET), BSD) CC=cc CPP=c++ endif
AR=$(TOOLCHAIN_PREFIX)ar RANLIB=$(TOOLCHAIN_PREFIX)ranlib
ifeq ($(TARGET), WIN32) PROJECT_BINARY_NAME := $(PROJECT_BINARY_NAME).exe endif
LIB_NAME = $(LIB_OBJS_DIR)/libiec61850.a
ifeq ($(TARGET), BSD) CFLAGS += -arch i386 LDFLAGS += -arch i386 endif
ifeq ($(TARGET), WIN32) DYN_LIB_NAME = $(LIB_OBJS_DIR)/iec61850.dll else
ifeq ($(TARGET), BSD) DYN_LIB_NAME = $(LIB_OBJS_DIR)/libiec61850.dylib else DYN_LIB_NAME = $(LIB_OBJS_DIR)/libiec61850.so endif
endif