在项目中,使用C语言编写了一个socket后台程序tkcofferd,并且为方便客户端的使用,提供了动态库,其中包含socket接口。
现在的需求是使用qt做一个前端界面,用来展示tkcofferd的socket接口功能,用于测试目的。
qt中使用c++语言编写,如果需要调用tkcofferd的socket接口(由C语言编写),需要指明函数导出方式,详述如下:
转自http://linhs.blog.51cto.com/370259/140927
C++调用C的库函数时,如果头文件定义得不恰当,可能会出现明明某函数在obj文件中存在,但是却发生链接失败的情况,出现如下错误:
undefined reference to 'xxx'
出现问题的原因是c库函数编译成obj文件时对函数符号的处理和C++不同。因为C++函数支持重载,所以函数符号的处理要更复杂一些,c往往不作修饰。
例如有函数:
/*dofunc.c*/#include
intdofunc()
{
printf("dofunc\n");
}
使用gcc编译成obj后
gcc -c dofunc.c
#生成 dofunc.o
objdump -x dofunc.o
[0](sec -2)(fl 0x00)(ty 0)(scl 103) (nx 1) 0x00000000 dofunc.c
File
[2](sec 1)(fl 0x00)(ty