原文件
# 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
Makefile修改支持32位Linux编译
1460

被折叠的 条评论
为什么被折叠?



