0
value *= pow(10, 3); // this one compiles
value *= pow(10, aVar); // this one produces this error:
                         //Number.c:(.text+0x469): undefined reference to `pow'

aVarはint変数です。

どうなり得るか?

私はmakefileを使用しています。「makelexanc」を実行しています。makefileは次のようになります。

lexanc:  lexandr.o lexanc.o scanner.o printtoken.o token.h lexan.h Number.o
    cc -o lexanc -lm lexandr.o lexanc.o scanner.o printtoken.o Number.o
...
Number.o: Number.c Number.h lexan.h
    cc -c Number.c

lexanc.o: lexanc.c token.h lexan.h Number.h
    cc -c lexanc.c
...

私のccバージョンは次のとおりです:laygr @ xxx $ cc --version cc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3

4

2 に答える 2

6

ライブラリは、コンパイルオプションのすべてのオブジェクトの後に来る必要があります。次のように変更します。

lexanc:  lexandr.o lexanc.o scanner.o printtoken.o token.h lexan.h Number.o
    cc -o lexanc lexandr.o lexanc.o scanner.o printtoken.o Number.o -lm

メモ-lmは最後に移動しました。

于 2013-02-06T00:03:48.503 に答える
2

含めていmath.hますか?-Wall -ansi -pedanticコマンドライン引数としてCコンパイラに追加してみてください。CFLAGS通常、この目的のためにどこかに定義があります。

編集
これは実際、私が完全に忘れていた一般的な問題です。-lmパラメータリストの最後に移動します。より具体的には、すべてのオブジェクトのにある必要があります。詳細については、この質問への回答をご覧ください。

于 2013-02-05T23:56:49.917 に答える