修改make文件支持make调用gcc编译32位Linux程序

Makefile修改支持32位Linux编译

原文件

# Build Examples

ASMXML_INC = ../include
ASMXML_OBJ = ../obj/elf/asm-xml.o

CC = gcc
CFLAGS = -O2 -fomit-frame-pointer -I $(ASMXML_INC)
LFLAGS = -s

all: simple xml-to-table db2html

simple: simple.o $(ASMXML_OBJ)
	$(CC) $(LFLAGS) $^ -o $@

simple.o: c/simple/simple.c
	$(CC) $(CFLAGS) -c $^ -o $@

xml-to-table: xml-to-table.o $(ASMXML_OBJ)
	$(CC) $(LFLAGS) $^ -o $@

xml-to-table.o: c/xml-to-table/xml-to-table.c
	$(CC) $(CFLAGS) -c $^ -o $@

db2html: docbook-to-html.o $(ASMXML_OBJ)
	g++ $(CFLAGS) $^ -o $@

docbook-to-html.o: cpp/docbook-to-html/docbook-to-html.cpp
	$(CC) $(CFLAGS) -c $^ -o $@

clean:
	rm -f *.o table.csv simple xml-to-table db2html

修改后

# Build Examples

ASMXML_INC = ../include
ASMXML_OBJ = ../obj/elf/asm-xml.o

CC = gcc-12
CFLAGS = -m32 -O2 -fomit-frame-pointer -I $(ASMXML_INC)
LFLAGS = -m32 -s

all: simple xml-to-table db2html

simple: simple.o $(ASMXML_OBJ)
	$(CC) $(LFLAGS) $^ -o $@

simple.o: c/simple/simple.c
	$(CC) $(CFLAGS) -c $^ -o $@

xml-to-table: xml-to-table.o $(ASMXML_OBJ)
	$(CC) $(LFLAGS) $^ -o $@

xml-to-table.o: c/xml-to-table/xml-to-table.c
	$(CC) $(CFLAGS) -c $^ -o $@

db2html: docbook-to-html.o $(ASMXML_OBJ)
	g++-12 $(CFLAGS) $^ -o $@

docbook-to-html.o: cpp/docbook-to-html/docbook-to-html.cpp
	$(CC) $(CFLAGS) -c $^ -o $@

clean:
	rm -f *.o table.csv simple xml-to-table db2html

主要是修改如下三行,指定c编译器和编译标记,

CC = gcc-12
CFLAGS = -m32 -O2 -fomit-frame-pointer -I $(ASMXML_INC)
LFLAGS = -m32 -s

注意链接标记LFLAGS也需要添加-m32,若不做修改,则会报错:

gcc-12 -s xml-to-table.o ../obj/elf/asm-xml.o -o xml-to-table
/usr/bin/ld: i386 architecture of input file `xml-to-table.o' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `../obj/elf/asm-xml.o' is incompatible with i386:x86-64 output

因为编译simple那一行用LFLAGS拼接后不含-m32标记。

做了以上修改后,simple和xml-to-table示例都能编译成功。但编译docbook-to-html报错。

root@6ae32a5ffcde:/par/asm-xml-1.4/examples# make -f linux.mak
gcc-12 -m32 -O2 -fomit-frame-pointer -I ../include -c cpp/docbook-to-html/docbook-to-html.cpp -o docbook-to-html.o
In file included from /usr/include/c++/12/stdlib.h:36,
                 from cpp/docbook-to-html/docbook-to-html.cpp:7:
/usr/include/c++/12/cstdlib:41:10: fatal error: bits/c++config.h: No such file or directory
   41 | #include <bits/c++config.h>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.

docbook-to-html还不行是因为apt install gcc-multilib只安装了gcc库, 而没有安装g++库, 编译器找不到32位c++头文件和库。用apt install g++-multilib安装后,再次make就好了。

root@6ae32a5ffcde:/par/asm-xml-1.4/examples# make -f linux.mak
gcc-12 -m32 -O2 -fomit-frame-pointer -I ../include -c cpp/docbook-to-html/docbook-to-html.cpp -o docbook-to-html.o
g++-12 -m32 -O2 -fomit-frame-pointer -I ../include docbook-to-html.o ../obj/elf/asm-xml.o -o db2html

执行如下命令行就能从xml数据中得到一个htm文件

./db2html data/docbook.xml >docbook.htm
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值