将外部库链接到项目仍然提供未定义的引用
Linking external library to project still gives undefined reference
我有一个 librdma.a,我需要 link 到我当前的项目。当我 运行 a nm 在 librdma.a 上时,这就是我得到的:-
0000000000000000 T set_attribute
这意味着该功能在代码中可用。
现在,当我尝试 link 这个 .a 文件到我当前的项目并创建一个 .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() 的定义,这是我尝试使用的函数。但是当我 运行 a nm 在这个存档文件上时,我得到一个未定义的引用。
U _Z8set_attributePP5attrlPcS2_
此外,当我尝试 制作 完整的项目时,它又使用了这个 libsrc.a 文件,我得到如下错误:-
../libfinal/.libs/libfinal.so: undefined reference to `set_attribute()'
看起来您正在混合使用 C 库和 C++ 库,并且 C 库的 headers 没有包含在 extern C
块中。因此,在第一个库和它引用的库中,未损坏的名称 set_attribute 得到的是 _Z8set_attrPP5attrlPcS2_.
的损坏名称
我有一个 librdma.a,我需要 link 到我当前的项目。当我 运行 a nm 在 librdma.a 上时,这就是我得到的:-
0000000000000000 T set_attribute
这意味着该功能在代码中可用。
现在,当我尝试 link 这个 .a 文件到我当前的项目并创建一个 .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() 的定义,这是我尝试使用的函数。但是当我 运行 a nm 在这个存档文件上时,我得到一个未定义的引用。
U _Z8set_attributePP5attrlPcS2_
此外,当我尝试 制作 完整的项目时,它又使用了这个 libsrc.a 文件,我得到如下错误:-
../libfinal/.libs/libfinal.so: undefined reference to `set_attribute()'
看起来您正在混合使用 C 库和 C++ 库,并且 C 库的 headers 没有包含在 extern C
块中。因此,在第一个库和它引用的库中,未损坏的名称 set_attribute 得到的是 _Z8set_attrPP5attrlPcS2_.