2017-08-07 45 views
0

我有一个库(giftiio),其头文件位于/usr/include/giftilibgiftiio.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(); 
} 

然后我尝试编译此程序:

,并出现以下错误:

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

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

回答

1

get the following error

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

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

要了解原因,读thisthis

更新:

changing the order does not help

从错误消息,我们看到,未解析的符号是一个C++错位之一。

正在搜索gifti_disp_lib_version,我觉得这个版本的gifti_io.h。看起来这是一个纯粹的库,并且标题缺少正确的守卫。

要解决此问题,你必须改变你的程序就像这样:

extern "C" { 
#include <gifti_io.h> 
} 

int main(const int argc, const char *argv[]) { 
    // rest as before ... 
+0

感谢您的链接,我想我理解他们。但是,更改订单并没有帮助。如果我复制并粘贴你的命令,我会得到完全相同的错误。 –

+0

为了更加安全,我可以将命令分成两部分,并且先编译: 'g ++ -c -I/usr/include/gifti -I/usr/include/nifti read_hemi.cc' 后面跟着 'g ++ read_hemi .o -lgiftiio' 这将返回相同的错误 –

+0

@CarsonMcNeil我已更新答案。 –

相关问题