免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1902 | 回复: 3
打印 上一主题 下一主题

[函数] 请教关于inline函数在gcc的链接问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-21 17:03 |只看该作者 |倒序浏览
本人今天遇到一个问题不明白 希望大家指点一下
就是inline函数的连接问题,问题是这样的
假如把inline函数的声明和定义一起写,形如
inline void ADD_ONE_LINE_XML_STR(const char* szNodeName,const char* szNodeValue,std::string& sXml)
{
        char szTmp[1024] = {0};
        snprintf(szTmp,sizeof(szTmp),"<%s><![CDATA[%s ]]></%s>\n",szNodeName,szNodeValue,szNodeName);
        sXml.append(szTmp);
}
那么使用是不会有问题的,但是假如分开。h和。cpp,把声明和定义分开 当使用并连接这个函数时 就会出现
/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3/../../../../include/g++-3/std/bastring.cc:470: undefined reference to `ADD_ONE_LINE_XML_NUM(char const *, unsigned long, basic_string<char, string_char_traits<char>, __default_alloc_template<true, 0> > &)'
这样的问题,应该如何解决?

麻烦大家解答一下 谢谢

论坛徽章:
0
2 [报告]
发表于 2006-04-21 17:08 |只看该作者
当使用内联函数时,编译器必须看到函数定义,而不仅仅看到首次调用该函数前的声明
使用内联函数的每个原文件中都要定义该内练函数,因此通常将内联函数定义在头文件

论坛徽章:
0
3 [报告]
发表于 2006-04-21 17:16 |只看该作者

不好意思 搞错了 再次请教

那有办法把定义和实现分开吗 我看到有人是这么写的 就是看不到他的makefile怎么写
我也常是了很多makefile的选项,什么-O3之类的 不过这些都是些编译选项 我估计要是能连接上,恐怕得加些链接选项。能否指点一下阿?谢谢

论坛徽章:
0
4 [报告]
发表于 2006-04-27 16:19 |只看该作者

回复 3楼 luciouslu 的帖子

连接失败,要在编译时带上函数所在的目标文件

比如ADD_ONE_LINE_XML_STR放在a.cpp中,主程序是main.cpp
分别将a.cpp和main.cpp编译成相应的.o
然后
g++ a.o main.o
连接成a.out
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP