automake的未定义引用

undefined reference with automake

本文关键字:引用 未定义 automake      更新时间:2023-10-16

我有一个共享库(在c++中),它有一个函数foo()(声明为extern c),该函数由automake编译的c中项目中的函数调用。所以我有一个makefile.am,它指向一个include.am,我在那里添加了我的库的名称和位置//释放/lib/libabc.so到xyz_LDADD变量,确切地说,我有xyz_LDADD=libabc.so

foo的声明如下:

#ifdef __cplusplus
extern "C" {
#endif
void foo(void);
#ifdef __cplusplus
}
#endif

当我尝试make时,我得到了一个对foo()错误的未定义引用。

如果我更改d库abc的名称,我会得到一个错误,所以我认为编译器能够找到该库。

我还有一些运行良好的静态库。有人能帮忙吗。。提前感谢

若要从c调用,c++方法必须用extern "C"或在extern "C"块中声明。不仅在头原型中,在源代码中也是如此。

要知道这是否是原因,请尝试在nm工具中查找foo符号。

像这样:

nm ../Release/lib/libabc.so | grep foo

如果您看到foo单词,没有任何添加,那么foo方法用extern "C"声明,并且可以从c代码中使用。如果您看到它在名称之前或之后有额外的字符,那么它是c++,并且不能从c代码中使用。