-1

ローカルの Ubuntu 14.04 マシンに PintOS をインストールしようとしています。make を実行してユーティリティをコンパイルしようとすると。次のエラーが表示されます。

ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ ls
backtrace  Makefile   pintos   pintos.~1.55.~  pintos-mkdisk             setitimer-helper.o  squish-unix.c
CVS        Makefile~  pintos~  pintos-gdb      setitimer-helper.c         squish-pty.c
ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ make
gcc -lm  setitimer-helper.o   -o setitimer-helper
setitimer-helper.o: In function `main':
setitimer-helper.c:(.text+0xbe): undefined reference to `floor'
collect2: error: ld returned 1 exit status
make: *** [setitimer-helper] Error 1
ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ 

数学ライブラリ ( で<math.h>使用されるヘッダー用setitimer-helper.c) が正しくリンクされていません。Makefile を調べると、これが出力です。

ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ cat Makefile
all: setitimer-helper squish-pty squish-unix

CC = gcc
CFLAGS = -Wall -W
LDFLAGS = -lm
setitimer-helper: setitimer-helper.o
squish-pty: squish-pty.o
squish-unix: squish-unix.o

clean: 
    rm -f *.o setitimer-helper squish-pty squish-unix

修正方法を教えてください。ちなみにgcc-4.8.6を使っています。

4

1 に答える 1

1
gcc -lm  setitimer-helper.o   -o setitimer-helper

問題は、GCC に対する引数の順序です。これを試して:

gcc -o setitimer-helper setitimer-helper.o  -lm

これは、ldリンク時に未定義のシンボルを解決する方法によるものです。基本的に、以前の方法では、ld最初-lmに「このライブラリを含める理由はありません」と表示されます。次に、setitimer-helper.oへの未解決の参照を持つyour が含まれますfloor。その後、考慮すべきライブラリがなくなり、floor未解決のままになります。

後に来る場合-lmは、 への参照を解決できますfloor

于 2015-09-25T03:35:26.580 に答える