2016-04-05 5 views
0

現在のプロジェクトにリンクする必要があるlibrdma.aがあります。私はlibrdma.aにnmのを実行すると、これは私が得るものです: -外部ライブラリをプロジェクトにリンクしても未定義の参照が返される

0000000000000000 T set_attribute 

機能はコード内で利用可能であることを意味しています。今

私はこのMakefile.am使用して、私の現在のプロジェクトにこの .Aファイルをリンクし、そのための .Aファイルを作成しよう: - これは作成

noinst_LTLIBRARIES=  libsrc.la 

libsrc_la_SOURCES=  One.cpp \ 
         Two.cpp \ 

libsrc_la_CPPFLAGS = -I$(top_srcdir)/inc -I$(rdma_dir)/include 

libsrc_la_LIBADD =  -L$(rdma_dir)/lib -lrdma 

をlibsrc.aファイルは、技術的にset_attribute()の定義が必要です。これは、私が使用しようとしている関数です。しかし、このアーカイブファイルでnmを実行すると、私は定義されていない参照を取得します。また

    U _Z8set_attributePP5attrlPcS2_ 

、私はにしようと順番にこのlibsrc.aファイルを使用して、私はこれらのようなエラーが出ていること、完全なプロジェクトを行います - あなたが混合されているよう

../libfinal/.libs/libfinal.so: undefined reference to `set_attribute()' 
+0

'U_Z8set_attrPP5attrlPcS2_'はset_attributeを含んでいませんが、 'set_attr'を含んでいます。何が定義されているか、実際に何が呼び出されているかを確認してください。 – oklas

+0

私の悪いです。投稿が編集されました。 –

答えて

1

に見えますC++ライブラリを含むCライブラリ、およびCライブラリのヘッダは、extern Cブロックにラップされません。したがって、最初のライブラリと参照先のライブラリに、unmangledという名前のset_attributeがあり、_Z8set_attrPP5attrlPcS2_の名前が変更されています。