1

アプリをコンパイルしようとすると、2つのエラーが発生します。

$ g ++ -static -emit-swf -o CloudClient.swf -I ../ boost / boost_libraries / install-dir / include -I ../ ffm peg-1.0 / bin / include -L ../ boost / boost_libraries / install -dir / lib -L ​​../ ffmpeg-1.0 / bin / lib timer.o audio_encoder.o audio_generator.o video_encoder.o video_generator_rainbow.o sim ple_synchronizer.oマルチプレクサ.otransmitter.ograph_runner.ocloud_client.o -lswscale- lavformat -lavcodec -lavutil -lboost_system -lboost_date_time -lboost_thread -pthread -lm

../ffmpeg-1.0/bin/lib/libswscale.a: error: undefined reference to 'exp'
../ffmpeg-1.0/bin/lib/libavcodec.a: error: undefined reference to 'log'
collect2: ld returned 1 exit status

私の問題logexpあり、どこに置い-lmても役に立たない場合は、代わりに文字通り独自のスタブを作成しexplogライブラリをそれらにリンクする方法を考えますか?...。

4

1 に答える 1

2

それらをCファイル(C ++コンパイラではなくCコンパイラでコンパイルされるよりも)で実装するか、C++ファイルで実装してextern"C"リンケージを提供します。例えば:

extern "C" double log(double x)
{
    // ...
}

明らかに、リンクの問題を解決する方が良いでしょう。標準Cライブラリルーチンの独自のバージョンを提供する必要はありません。

于 2012-10-25T00:35:47.667 に答える