当前位置: 技术问答>linux和unix
链接问题,调用动态库中函数时出错
来源: 互联网 发布时间:2015-12-19
本文导语: 调用动态库时,使用到动态库中函数的文件已经编译通过,头文件已包括。链接时已在指定路径下找到对应动态库,且调用成功,但使用其中函数时报如下错误: Undefined first reference...
调用动态库时,使用到动态库中函数的文件已经编译通过,头文件已包括。链接时已在指定路径下找到对应动态库,且调用成功,但使用其中函数时报如下错误:
Undefined first referenced
symbol in file
NonrepServInterface srvrsmtp.o
ld: fatal: Symbol referencing errors. No output written to sendmail
collect2: ld returned 1 exit status
make: *** [sendmail] Error 1
按道理来说应该是动态库中没有定义这个函数,但我动态库的源代码中有这个函数的定义,我也查了声明和定义,两者完全一样,声明如下:
void NonrepServInterface(int nodestate, const char* remoteid,int port, char* data, int *datalen, char* mail, int *maillen)
我这个动态库是用C++写的,整个库里只有这一个单独的函数,其余全部是类的方法。调用该库的是用C实现的sendmail,这个函数就当作接口用了。
Undefined first referenced
symbol in file
NonrepServInterface srvrsmtp.o
ld: fatal: Symbol referencing errors. No output written to sendmail
collect2: ld returned 1 exit status
make: *** [sendmail] Error 1
按道理来说应该是动态库中没有定义这个函数,但我动态库的源代码中有这个函数的定义,我也查了声明和定义,两者完全一样,声明如下:
void NonrepServInterface(int nodestate, const char* remoteid,int port, char* data, int *datalen, char* mail, int *maillen)
我这个动态库是用C++写的,整个库里只有这一个单独的函数,其余全部是类的方法。调用该库的是用C实现的sendmail,这个函数就当作接口用了。
|
模块srvrsmtp.o中没有NonrepServInterface 的实现,
在NonrepServInterface 前加上extern "C"试试看
在NonrepServInterface 前加上extern "C"试试看