c++ - 将外部库链接到项目仍然提供 undefined reference

标签 c++ compilation linker archive-file

我有一个 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 时,我得到一个 undefined reference 。

                 U _Z8set_attributePP5attrlPcS2_

此外,当我尝试制作完整的项目时,又会使用这个 libsrc.a 文件,我会收到如下错误:-

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

最佳答案

看起来您正在混合使用 C 库和 C++ 库,并且 C 库的 header 未包含在 extern C block 中。因此,在第一个库和它所引用的库中,未损坏的名称 set_attribute 会得到一个损坏的名称 _Z8set_attrPP5attrlPcS2_。

关于c++ - 将外部库链接到项目仍然提供 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421859/

相关文章:

不包含头文件的编译

c++ - random_shuffle 列表通过将它复制到一个 vector 然后返回

c++ - 我们可以用 C++ 开关写这个吗?

c++ - 当(CUDA 7.5 的)nvcc/cudafe++ 因段错误而崩溃时我该怎么办?

Groovy 脚本的 Eclipse RCP 独立导出问题

c - 了解编译、加载器、链接器和进程结构的资源

macos - 找不到 Mac X 框架内核

c++ - 对现有函数的 undefined reference

c++ - 退出后调试崩溃? (主要返回后)

c++ - ofstream operator<< 访问冲突错误