2

Linux 環境で書いているプログラムの make ファイルを使用する際に問題があります。このプログラムは、教授から提供された bitmapImage.h と bitmapImage.so を使用するシダのフラクタルです。メイクファイルを実行しようとするたびに、長い一連のエラーが発生します。主なものは次のとおりです。

    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)
4

3 に答える 3

5

コンパイル行にオプションを追加して、-m32すべてを強制的に 32 ビット アドレス空間用にコンパイルします。(64 ビット システムでも動作します。)

于 2012-10-16T22:38:26.550 に答える
0

はい、まさにそれが問題です。32 ビットのオブジェクト ファイルを 64 ビットのオブジェクト ファイルにリンクすることはできません。次のいずれかを行う必要があります。

  • 32 ビット マシン (実または仮想) でコンパイルします。
  • 教授に 64 ビット ライブラリを依頼するか、
  • ソース コードをライブラリに要求して、すべてを自分でコンパイルできるようにする
于 2012-10-16T22:36:05.583 に答える
0
  1. file実際に共有ライブラリが 32 ビットかどうかを確認するために使用します。
  2. そうである場合は、何らかの方法でその 64 ビット コピーを取得する必要があります。
于 2012-10-16T22:36:33.337 に答える