-1

Makefile コードにある次のコマンドで .cc ファイルをコンパイルしました。

bin/bash ../libtool --silent --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
-I.. -I../include/ -I..    -g -O2 -MT rtpsession_inet.lo -MD -MP -MF 
.deps/rtpsession_inet.Tpo -c -o rtpsession_inet.lo rtpsession_inet.cc

.cc ファイルにはrtp_session_rtp_recvという名前の関数があります。しかし、Makefileで生成したライブラリを使用すると、この関数のリファレンスが見つからないと言われています。

そのため、rtpsession_inet.cc によって生成された .o ファイルを確認したところ、関数名が _Z20rtp_session_rtp_recvP11_RtpSessionj に変更されている間、rtp_session_rtp_recv という名前の関数がないことがわかりまし

その間、名前が変更された他の関数がいくつかあります。

ただし、rtp_session_set_remote_addr_fullなどの関数はまったく変更されていません。

追加キャラの意味は?どうすればこの問題に対処できますか?

Linuxでファイルをコンパイルし、コマンドを使用します

nm rtpsession_inet.o

.o ファイルを読み取ります。(関数名が間違っているものも含めて全てTタグ付きで参照あり)

ありがとう!

4

2 に答える 2

0

追加の文字は、コンパイラによって追加されたシンボルの「装飾」であり、関数/メソッドのシグネチャ、つまり戻り値の型とパラメーターを識別するために使用されます。これは、特定の呼び出しで同じ名前 (オーバーロード) の多くの関数のどれを呼び出すかをランタイムが決定するのに役立ちます。

于 2013-08-14T22:52:58.877 に答える