異なるバージョンのlibm.aを使用しています。私が遊んでいるのはfdlibmのlibm.a(Sunから)です。
問題は、私のプログラムがfdlibmのlibm.aの関数を呼び出さず、システムのglibcのlibm.aの関数を呼び出すと感じていることです。
#include "fdlibm.h"
int main(){
double x = sin(3);
}
プログラムはコンパイルされたC ++プログラムです(他のc ++プログラムとリンクする必要があるため):
g ++ prog.cpp libm.a
ここで、libm.aはfdlibmのものです。(Sunから、http://www.netlib.org/fdlibm/readme)
sin
実行時に実際に何が呼び出されるかをどのように知ることができますか?objdump、gdbなどのさまざまなツールについて聞いたことがあります...私の場合、どのツールをどのように使用できますか?
fdlibmのlibm.aを強制的に使用するにはどうすればよいですか?
ありがとう。
質問1.objdump、gdbなどのさまざまなツールについて聞いたことがあります。
gdbと同じように。ファイルtrace_sin.gdbを作成します
$ cat trace_sin.gdb
set confirm off
b sin
commands
bt
c
end
r
quit
そして、プログラムを実行します。
$ gdb -q -x trace_sin.gdb ./a.out Reading symbols from ./a.out...(no
debugging symbols found)...done. Breakpoint 1 at 0x400498
Breakpoint 1, 0x000000314941c760 in sin () from /lib64/libm.so.6
#0 0x000000314941c760 in sin () from /lib64/libm.so.6
#1 0x0000000000400629 in main ()
あなたが私の場合に見るようにsin
libmから来ています
質問2.fdlibmのlibm.aを強制的に使用するにはどうすればよいですか?
sin
fdlibmからがlibmの前に来ることを確認してくださいsin
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加