易截截图软件、单文件、免安装、纯绿色、仅160KB

用C++调用C的库函数(转)

 用C++调用C的库函数
  C++调用C的库函数时,如果头文件定义得不恰当,可能会出现明明某函数在obj文件中存在,但是却发生链接失败的情况,出现如下错误:
  
  undefined reference to 'xxx'
  出现问题的原因是c库函数编译成obj文件时对函数符号的处理和C++不同。因为C++函数支持重载,所以函数符号的处理要更复杂一些,c往往不作修饰。
  例如有函数:
/* dofunc.c */
#include <stdio.h>
int dofunc()
{
        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    20)(scl     2) (nx 1) 0x00000000 _dofunc
AUX tagndx 0 ttlsiz 0x0 lnnos 0 next 0
[    4](sec    1)(fl 0x00)(ty     0)(scl     3) (nx 1) 0x00000000 .text
AUX scnlen 0x14 nreloc 2 nlnno 0
[    6](sec    2)(fl 0x00)(ty     0)(scl     3) (nx 1) 0x00000000 .data
AUX scnlen 0x0 nreloc 0 nlnno 0
[    8](sec    3)(fl 0x00)(ty     0)(scl     3) (nx 1) 0x00000000 .bss
AUX scnlen 0x0 nreloc 0 nlnno 0
[ 10](sec    4)(fl 0x00)(ty     0)(scl     3) (nx 1) 0x00000000 .rdata
AUX scnlen 0x8 nreloc 0 nlnno 0
[ 12](sec    0)(fl 0x00)(ty    20)(scl     2) (nx 0) 0x00000000 _printf
  
  c的dofunc函数在obj文件里的符号为 _dofunc
  
  再看看使用g++编译后的代码:
 
g++ -c dofunc.c
objdump -x dofunc.o
SYMBOL TABLE:
[    0](sec -2)(fl 0x00)(ty   &


相关文档:

C: 面向对象(2)

演示如何用C实现继承,重载之类的玩艺儿。VC++6.0编译通过。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef class
        #define class struct
#endif
#ifndef private
        #define privat ......

在windows平台上搭建linux C 开发环境

注:请允许我转载您的佳作
在windows上开发能够在linux上编译的C代码,我查了查有2个软件可以实现,一个是Cygwin,一个是mingw。其中cygwin是一个windows上linux环境的模拟工具,他提供了很多linux工具的windows实现版本,例如vi,emacs等等,当然也包括GCC。使用mingw的好处就是编译过的程序直接就可以跑了,而cygwin则需 ......

在linux下,如何在C语言中使用正则表达式(整理)


  一个正则表达式的教程可以参看(里面有个测试正则表达式的工具)
     http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm#ad
 
     正则表达是用来匹配字符串的好东东。
   
     如果用户熟悉Lin ......

实例讲解如何使用C++操作MySQL数据库类

 
  用C++操作MySQL数据库类:
  注释:这几个类对处理不是很大数据量的操作是很理想的, 但不适宜特大型的数据的查询,因为源码中将查询到的数据直接放入了内存。
  /*
  * project:
  * 通用模块 ( 用 c++ 处理 mysql 数据库类,像ADO )
  *
  * description:
  *
  * 通过DataBase,Reco ......

Windows Mobile下访问Sqlite的Native C++封装

背景
当前移动设备开发领域,在本地数据存储方面,Sqlite几乎成了事实标准,Andriod (android.database.sqlite),iPhone (SQLite for iPhone SDK 和 FMDB for iPhone),Palm WebOS (webOS SQL Tutorial),新版本的Symbian也直接built-in Sqlite了(20 million Symbian smartphones shipped in Q3 2007 Newer versions of th ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号