免费注册 查看新帖 |

Chinaunix

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

linux C++ C混编问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-11 10:45 |只看该作者 |倒序浏览
描述:我在linux下编译一个代码,需要将C++的库引入,但是,我是写c的,所以,函数都是用c实现,但是编译器选用的g++,问题表现是,我有两个函数是公函,需要在另外的代码中实现,即放在另外一个源代码中。这时候编译出现undefined reference to `trim',trim即我的函数。如果我将此两个函数放在主调函数所在的源代码(即同一个源代码中),则不会出现错误。我在此代码中加入声明 extern "C" void trim(char *p);也不行。估计是一个很简单的问题,高人鄙视我的时候手下留情。另外,我把编译器换成gcc也可以。但是还是想知道原因。请高人不吝解答,谢谢。
环境:linux g++

论坛徽章:
0
2 [报告]
发表于 2011-04-11 11:34 |只看该作者
common.h

void func1();
void func2();

common.c

void func1()
{
}
void func2()
{
}

main.cpp


extern "c" {
#include "common.h"
}

论坛徽章:
0
3 [报告]
发表于 2011-04-11 11:59 |只看该作者
PS:
C实现的代码gcc编译
C++的代码g++编译

论坛徽章:
0
4 [报告]
发表于 2011-04-11 12:40 |只看该作者
我的写法和2楼基本是一摸一样的。用gcc就没得问题。我只是想都用g++编译看行不行,但是如果不放在一个源代码中间就会报未定义的引用,这个才是问题。不过还是谢谢2楼得兄弟。

论坛徽章:
0
5 [报告]
发表于 2011-04-11 13:11 |只看该作者
C++会给函数改名,C不会.所以要extern C防止这个问题.

论坛徽章:
0
6 [报告]
发表于 2011-04-11 13:33 |只看该作者
回复 4# blackuhlan

都用g++编译就直接include了
不需要extern

论坛徽章:
0
7 [报告]
发表于 2011-04-11 15:09 |只看该作者
我看了我的符号表了,是一样的,不明白为什么不行呢。

论坛徽章:
0
8 [报告]
发表于 2011-04-11 16:49 |只看该作者
回复 1# blackuhlan


    描述:我在linux下编译一个代码,需要将C++的库引入,但是,我是写c的,所以,函数都是用c实现,但是编译器选用的g++,问题表现是,我有两个函数是公函,需要在另外的代码中实现,即放在另外一个源代码中。这时候编译出现undefined reference to `trim',trim即我的函数。如果我将此两个函数放在主调函数所在的源代码(即同一个源代码中),则不会出现错误。我在此代码中加入声明 extern "C" void trim(char *p);也不行。估计是一个很简单的问题,高人鄙视我的时候手下留情。另外,我把编译器换成gcc也可以。但是还是想知道原因。请高人不吝解答,谢谢。
环境:linux g++


如果你用g++编译的话,即使你的文件时.c 也会按c++的方式编译的,这样的话加extern也是不行的。
这个你要多注意,一定要和库统一才行。其实不难。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP