我在 MacOS 上修改了 ARToolkit 的一些代码,现在需要使用 Windows 子系统(Ubuntu)进行编译。我已遵循ARToolkit 用户手册指令并安装了所有使用 Ubuntu 进行编译的库。
这是我的 makefile:
INC_DIR= ../../include
LIB_DIR= ../../lib
BIN_DIR= .
CC=cc
LDFLAG= -L$(LIB_DIR)
LIBS= $(shell pkg-config --libs opencv) -lARgsub -lARvideo -lAR -framework GLUT -framework OpenGL -framework CoreFoundation
CFLAG= $(shell pkg-config --cflags opencv) -O -I$(INC_DIR) -Wno-deprecated-declarations
OBJS = SOIL2/SOIL2.o SOIL2/etc1_utils.o SOIL2/image_DXT.o SOIL2/image_helper.o
HEADDERS =
all: $(BIN_DIR)/simple $(BIN_DIR)/simple2
$(BIN_DIR)/simple: simple.o $(OBJS)
${CC} -o $(BIN_DIR)/simple simple.o $(OBJS) $(LDFLAG) $(LIBS)
$(BIN_DIR)/simple2: simple2.o $(OBJS)
${CC} -o $(BIN_DIR)/simple2 simple2.o $(OBJS) $(LDFLAG) $(LIBS)
simple.o: simple.c $(HEADDERS)
${CC} $(CFLAG) -c simple.c
simple2.o: simple2.c $(HEADDERS)
${CC} $(CFLAG) -c simple2.c
clean:
rm -f *.o
rm -f $(BIN_DIR)/simple
rm -f $(BIN_DIR)/simple2
allclean:
rm -f *.o
rm -f $(BIN_DIR)/simple
rm -f $(BIN_DIR)/simple2
rm -f Makefile
现在我可以成功使用 makefile 进行编译,但当我尝试运行程序时遇到错误:
./simple: cannot execute binary file: Exec format error
然后我用文件命令检查:
Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
我的机器是这样的:
Linux Raisa 4.4.0-17134-Microsoft #285-Microsoft Thu Aug 30 17:31:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
我也读过这里的帖子:
- 我可以在 Linux 上运行 Mach-O 可执行 i386 二进制文件吗?(2010 年询问)
- 在 Linux 机器上运行 Mach-O 64 位二进制文件有哪些替代方法?(2017 年询问)
基本上他们都说我们对此无能为力。这仍然适用吗?这是我第一次在编译程序时需要在操作系统之间切换,我对此并不熟悉。如果我应该编辑部分,我需要修改哪个具体部分?