2016-04-05 23 views
0

我有一个librdma.a,我需要链接到我当前的项目。当我运行一个librdma.a 纳米,这是我得到: -将外部库链接到项目仍然给出未定义的参考

0000000000000000 T set_attribute 

这意味着该函数是在代码中。

现在,当我尝试这个。一个文件链接到我的当前项目和使用创造.A文件,这Makefile.am: -

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_。

相关问题