make命令给出了不兼容的i386架构(i386x86-64)

时间:2012-10-16 22:30:25

标签: c++ linux makefile

我在make文件中使用我正在linux环境中编写的程序时遇到了问题。该程序是一个蕨类分形,使用我的教授给我的bitmapImage.h和bitmapImage.so。每当我尝试运行make文件时,我会得到一长串错误,主要是:

    make
g++    -c -o fern.o fern.cpp
g++    -c -o fernType.o fernType.cpp
g++ -m32 -o fern fern.o fernType.o bitmapImage.so
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: ld returned 1 exit status
make: *** [spiro] Error 1

我的猜测是bitmapImage.so是为32位系统设计的,但我的虚拟机ubuntu运行64位。我如何解决此问题,以便我可以编译我的程序?谢谢!

编辑:更新我的旧帖子以显示我正在获得的当前错误

生成文件:

# Make file for spirograph program

## note, uses bitmapImage shared object file (library).

OBJS = fern.o fernType.o
CC  = g++ -m32
DEPS1 = fernType.h
DEPS2 = bitmapImage.h

all: spiro

spiro: $(OBJS)
    $(CC) -m32 -o fern $(OBJS) bitmapImage.so

spiro.o:    fern.cpp $(DEPS1)
    $(CC) -m32 -c fern.cpp

spiroType.o:    fernType.cpp $(DEPS1) $(DEPS2)
    $(CC) -m32 -c fernType.cpp

# -----
# clean by removing object files.

clean:
    rm  $(OBJS)

3 个答案:

答案 0 :(得分:5)

-m32选项添加到编译行,强制为32位地址空间编译所有内容。 (它仍然可以在64位系统上运行。)

答案 1 :(得分:0)

是的,这正是问题所在 - 您无法将32位目标文件与64位目标文件链接。你需要:

  • 在32位计算机(真实或虚拟)上编译,
  • 向您的教授咨询64位库,或
  • 询问库的源代码,以便您自己编译

答案 2 :(得分:0)

  1. 使用file查看共享库是否为32位。
  2. 如果是,你将不得不以某种方式获得它的64位副本。