I have modified some code from ARToolkit in MacOS and now I need to compile it with Windows subsystem (Ubuntu). I have followed the ARToolkit user manual instruction and have installed all libraries to compile with Ubuntu.
Here's my 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
Now that I can compile using makefile successfully, when I try to run my program I encountered error :
./simple: cannot execute binary file: Exec format error
Then I checked with file command :
Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
And my machine is this :
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
And I also have read posts here :
- Can I run a binary file that is Mach-O executable i386 on linux? (asked in 2010)
- What are the alternatives for running a Mach-O 64-bit binary file on a linux machine? (asked in 2017)
and basically both of them stated that there's really nothing we can do about it. Does this still apply ? This is the first time I need to switch between OS when compiling a program, and I'm not familiar with this. If I should edit part which specific part I need to modify ?
0 Answers