使用automake的未定义引用

时间:2014-10-12 15:50:20

标签: c++ c compiler-errors linker automake

我有一个共享库(在c ++中),它有一个函数foo()(声明为extern c),由一个由automake编译的C项目中的函数调用。所以我有一个makefile.am,它指向include.am,我已经将我的库/../Release/lib/libabc.so的名称和位置添加到xyz_LDADD变量中,正是我有  xyz_LDADD = libabc.so

foo的声明如下:

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

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

如果我更改了d库abc的名称,我会收到错误,所以我假设编译器能够找到库。

我还有一些工作正常的静态库。 请有人帮忙吗...提前致谢

1 个答案:

答案 0 :(得分:0)

要从c调用,必须使用extern "C"extern "C"块声明c ++方法。 不仅在标题原型中,也在源头中。

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

像这样:

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

如果您看到foo字,但未添加任何内容,则可以使用foo声明extern "C"方法,并且可以在c代码中使用该方法。如果你在名字之前或之后看到附加字符,那么它就是c ++,并且不能在c代码中使用它。