我有一个librdma.a,我需要链接到我当前的项目。当我在librdma.a上运行 nm 时,这就是我得到的: -
0000000000000000 T set_attribute
这意味着该功能在代码中可用。
现在,当我尝试将此 .a 文件链接到我当前的项目并使用此 Makefile.am为其创建 .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 :(得分:1)
看起来您正在将C库与C ++库混合,并且C库的标头不会包含在extern C
块中。因此,第一个库中的unmangled name,set_attribute,以及它引用的库中,你得到一个错误的名称_Z8set_attrPP5attrlPcS2 _。