为什么即使链接器找到目标文件,我的程序也看不到函数定义?

时间:2017-08-07 00:01:37

标签: c++ linker g++

我有一个库(giftiio),其中包含/usr/include/gifti中的头文件和libgiftiio.a中的/usr/lib

我尝试将它用于一个简单的程序read_hemi.cc

#include <gifti_io.h>

int main(const int argc, const char *argv[]) {
  gifti_image *out_im;
  gifti_disp_lib_version();
}

然后我尝试用以下代码编译这个程序:

g++ -lgiftiio -I/usr/include/gifti -I/usr/include/nifti read_hemi.cc

并收到以下错误:

/tmp/ccqWBaLb.o: In function `main': 
read_hemi.cc:(.text+0x10): undefined reference to `gifti_disp_lib_version()'

请注意,头文件中定义的所有内容都是可访问的(例如gifti_image typedef)。但即使链接器没有在我的-lgiftiio标志处抱怨,建议它找到目标文件,我也没有得到我的函数定义。

1 个答案:

答案 0 :(得分:1)

  

收到以下错误

您的链接命令行错误,应该是:

@Repository
public class IAdminDAOImpl implements IAdminDAO {
     //Implementation here
}

@Service
public class AdminServiceImpl implements AdminService {
    //Implementation here
}

要了解原因,请阅读thisthis

<强>更新

  

更改订单无济于事

从错误消息中,我们看到未解析的符号是C ++受损的符号。

搜索gifti_disp_lib_version,我发现此版本的gifti_io.h。看来这是一个纯粹的g++ -I/usr/include/gifti -I/usr/include/nifti read_hemi.cc -lgiftiio 库,标题缺少正确的C警卫。

要解决此问题,您必须更改程序:

C++