当前位置: 代码迷 >> 驱动开发 >> 新人,怎么将一个c和c++的工程makefile之后生成的东西从mips转换成arm指令集呢
  详细解决方案

新人,怎么将一个c和c++的工程makefile之后生成的东西从mips转换成arm指令集呢

热度:179   发布时间:2016-04-28 10:03:17.0
新人求助,如何将一个c和c++的工程makefile之后生成的东西从mips转换成arm指令集呢?
本帖最后由 lanyu1986 于 2014-12-04 14:47:05 编辑
如题,本人只是个app程序,没有相关经验,今天老板突然让我做这件事:

具体这是一个c++的工程,以前是在makefile中指定使用mips工具链生成出来,然后嵌入到一个长得像usb一样的设备里面,插在别的电子设备(比如液晶电视)中使用的,但是现在由于平台更换成了android平台,于是需要把以前使用的mips指令集换成arm的然后编出so文件供android调用。

鉴于问题的突然性和短暂性,不会有时间让俺从头开始学起,想问问有经验的各位,有什么办法能用最简单最少的动作完成转换么?

以下是makefile中相关的部分代码,供参考:

//MakeConfig中

//.........................
ifeq ($(TOOLCHAIN_VER), 435)
    TOOLCHAIN_ROOT = /usr/local/msdk-4.3.6-mips-EL-$(KERNEL_VER)-0.9.30.3/bin
    MYCC = $(TOOLCHAIN_ROOT)/msdk-linux-gcc
    MYCXX = $(TOOLCHAIN_ROOT)/msdk-linux-g++
    MYAR = $(TOOLCHAIN_ROOT)/msdk-linux-ar
    MYRANLIB = $(TOOLCHAIN_ROOT)/msdk-linux-ranlib
    MYLD = $(TOOLCHAIN_ROOT)/msdk-linux-ld
    MYSTRIP = $(TOOLCHAIN_ROOT)/msdk-linux-strip
    DEFINES += -mips32r2
//...........................



//以下是主要的makefile

#==============================================================================
# GNU pathes (server admin update)
#==============================================================================
include ../../../include/MakeConfig     //这里引用的就是上面那个文件

#==============================================================================
# GNU  binaries (server admin update)
#==============================================================================
CXX=$(MYCXX)
CC=$(MYCC)
AR=$(MYAR)


#==============================================================================
# User root path (user update)
#==============================================================================
CSRC_DIR := src/
NETWORK_DIR := $(CSRC_DIR)network/
THREAD_DIR := $(CSRC_DIR)threads/
THREAD_P_DIR := $(THREAD_DIR)platform/
THREAD_P_L_DIR := $(THREAD_P_DIR)linux/
THREAD_P_PT_DIR := $(THREAD_P_DIR)pthreads/
UTILS_DIR := $(CSRC_DIR)utils/
PLIST_DIR := $(CSRC_DIR)plist/
SHAIRPORT_DIR :=$(CSRC_DIR)Shairport/
ENABLE_AUDIO=YES

ifeq ($(ENABLE_AUDIO), YES)
CXXFLAGS += -DENABLE_AUDIO
endif

ifeq ($(WIIMU_PROJECT_NAME), LINK_PLAY_TOPPING)
CXXFLAGS += -DNO_PHOTO_MUSIC
endif

OUT_DIR := objs/
BIN_DIR := bin/

INC_DIR := src/
INC += -I$(INC_DIR)
INC += -I$(NETWORK_DIR)
INC += -I$(THREAD_DIR)
INC += -I$(THREAD_P_DIR)
INC += -I$(THREAD_P_L_DIR)
INC += -I$(THREAD_P_PT_DIR)
INC += -I$(UTILS_DIR)
INC += -I$(PLIST_DIR)
INC += -I$(SHAIRPORT_DIR)
INC += -I../../Platform_Lib/openssl/include
INC += -Iinc/

OBJ :=
OBJ += $(OUT_DIR)get_mac.o
OBJ += $(OUT_DIR)Implementation.o
OBJ += $(OUT_DIR)Event.o
OBJ += $(OUT_DIR)Thread.o
OBJ += $(OUT_DIR)SystemClock.o
OBJ += $(OUT_DIR)JobManager.o
OBJ += $(OUT_DIR)HttpParser.o
OBJ += $(OUT_DIR)StringUtils.o
OBJ += $(OUT_DIR)fstrcmp.o
OBJ += $(OUT_DIR)AirPlayServer.o
OBJ += $(OUT_DIR)AirPlayer.o
OBJ += $(OUT_DIR)URL.o
OBJ += $(OUT_DIR)iterator.o
OBJ += $(OUT_DIR)list.o
OBJ += $(OUT_DIR)node.o
OBJ += $(OUT_DIR)node_iterator.o
OBJ += $(OUT_DIR)node_list.o
OBJ += $(OUT_DIR)PlistLite.o
OBJ += $(OUT_DIR)Plist.o
ifeq ($(ENABLE_AUDIO), YES)
OBJ += $(OUT_DIR)alac.o
OBJ += $(OUT_DIR)CHairTunes.o
OBJ += $(OUT_DIR)mutex.o
OBJ += $(OUT_DIR)RAOPClient.o
OBJ += $(OUT_DIR)RTSPPacket.o
OBJ += $(OUT_DIR)Shairport.o
OBJ += $(OUT_DIR)DMAP.o
endif

OUTPUT_TARGET=$(BIN_DIR)libplugin_decoder_cva_yuv_map220.a

.PHONY:
$(OUT_DIR)%.o: $(CSRC_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(THREAD_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(THREAD_P_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(THREAD_P_L_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(THREAD_P_PT_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(NETWORK_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(UTILS_DIR)%.c
$(CC) -c $(CFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(UTILS_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(PLIST_DIR)%.c
$(CC) -c $(CFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(SHAIRPORT_DIR)%.cpp
$(CXX) -c $(CXXFLAGS) $(INC) -o $@ $<

$(OUT_DIR)%.o: $(SHAIRPORT_DIR)%.c
$(CC) -c $(CFLAGS) $(INC) -o $@ $<

all : clean $(OUTPUT_TARGET) copy

$(OUTPUT_TARGET) : $(OBJ) 
$(AR) cq $(OUTPUT_TARGET) $(OBJ)
rm $(OUT_DIR)/*.o

copy:
cp $(OUTPUT_TARGET) ../../../lib
cp -rf inc/libplugin_decoder_cva_yuv.h ../../Include/Utility/Airplay/
cp -rf inc/plugin_decoder_cva_wav_api.h ../../Include/Utility/Airplay/

clean:
rm -fr $(OUT_DIR)* $(OUTPUT_TARGET)
endif

------解决思路----------------------
跨平台的移植编译啊,我也遇到过。

你在mips上跑的什么操作系统,是linux吗?

你那个C++的代码有依赖什么特殊的库没有?

不管怎么样,你改改make,编译出来先试试吧。

主要是交叉编译工具的修改,还有CPU体系结构的更改
------解决思路----------------------
找到c源码   换编译器编译一遍
  相关解决方案