`
dawning126
  • 浏览: 44969 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,这是因为C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。 但有时还会出现 ms.h:29: error: previous declaration of 'int function(int)' with 'C++' linkage main.cpp:24: error: co ...

用C++调用C的库函数

    博客分类:
  • C++
  • C
 
http://linhs.blog.51cto.com/370259/140927   C++调用C的库函数时,如果头文件定义得不恰当,可能会出现明明某函数在obj文件中存在,但是却发生链接失败的情况,出现如下错误:     undefined reference to 'xxx'   出现问题的原因是c库函数编译成obj文件时对函数符号的处理和C++不同。因为C++函数支持重载,所以函数符号的处理要更复杂一些,c往往不作修饰。   例如有函数: /* dofunc.c */ #include <stdio.h> int dofunc() {         print ...
  vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。   :s/vivian/sky/ 替换当前行第一个 vivian 为 sky   :s/vivian/sky/g 替换当前行所有 vivian 为 sky   :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky   :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky   n 为数字,若 n 为 ., ...
1、建用户: adduser phpq                             //新建phpq用户 passwd phpq                               //给phpq用户设置密码 2、建工作组 groupadd test                          //新建test工作组 3、新建用户同时增加工作组 useradd -g test phpq                      //新建phpq用户并增加到test工作组 注::-g 所属组 -d 家目录 -s 所用的SHELL 4、给已有的用户增加工作组 us ...
      常用虚拟机的朋友可能都会遇到一点小问题,就是用着用着虚拟机硬盘空间过小,需要硬盘扩容。自己重新装一个吧,又挺麻烦。于是,上网搜了下关于vmware硬盘扩容的方法。 网上也有好多人给出了一些指点,但是总有些些许许的小问题。笔者通过实验,总结了添加新硬盘 挂载新硬盘 硬盘扩容的一些方法,仅供大家做个参考。 Vmware下载地址:vmware下载 一:首先介绍硬盘扩容的方法: 1、vmware提供一个命令行工具,vmware-vdiskmanager.exe,位于vmware的安装目录下,比如 C:\Program Files\VMware\VMware Workstation\vm ...
SQL ServerSQL算法多线程数据结构 1.基本概念:     Merge Join([排序]合并联接)、Nested Loops(嵌套循环联接)、Hash Match都是物理运算符。     Merge Join常执行Inner Join(内部联接)、Left Outer Join(左外部联接)、Left Semi Join(左半部联接)、Left Anti Semi Join(左反半部联接)、Right Outer Join(右外部联接)、Right Semi Join(右半部联接)、Right Anti Semi Join(右反半部联接)和Union(联合)逻辑操作。     在 A ...
      连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件。WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行。             连接可分为以下几类:               内连接。(典型的连接运算,使用像   =   或   <>   之类的比较运算符)。包括相等连接和自然连接。           内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索   students   和   courses   表中学生标识号相同的所有行。             外连接。外连接可以是左 ...
df -h -l -x tmpfs
Linux下编译程序时,经常会遇到“undefined reference error” 报错, 这里总结一些可能的原因和解决方案,给需要的朋友: 说道undefined reference error,先提一下Linux gcc链接规则: 链接的时候查找顺序是: -L 指定的路径, 从左到右依次查找 由 环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找 /etc/ld.so.conf 指定的路径顺序 /lib 和 /usr/lib (64位下是/lib64和/usr/lib64) 动态库调用的查找顺序: ld的-rpath参数 ...
switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true.说实话  我也没有深入研究过这个问题的根源只是在实际开发中  没有人会去用很多很多else if的都是用 switch case 的  后者比较清晰  给人感觉就是一个脑子很清楚的人写出来的东西至于效率的本质  就让大企鹅去操心吧 编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询。 昨天发现了一本叫做CSAPP的书,终于找到了关于switch问题的解答。 这是一段C代码: /* $be ...
//方案— 优点:仅使用C标准库;缺点:只能精确到秒级 #include <time.h> #include <stdio.h> int main( void ) { time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); puts( tmp ); return 0; ...
具体每个平台的安装方法不一样,以下只是Red Hat Enterprise 4的安装方法, 其他平台请参见CUnit 的README文件 [root@localhost ~]# uname -a Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux [root@localhost CUnit-2.1-0]# pwd /root/CUnit-2.1-0                                                ...
su - dbra su root cd /dbra/app/softs/ruby-1.8.6-p114/ext/openssl   rm -rf *.o,openssl.so,Makefile ruby extconf.rb --with-openssl-dir=/dbra/app/lib/openssl make make install ossl_asn1.c:727: 警告:传递参数 1 (属于 ‘ASN1_get_object’)时在不兼容的指针类型间转换 gcc -I. -I. -I/dbra/app/lib/ruby/lib/ruby/1.8/x86_64-lin ...
1、linux下把文件传到另一个地方。 auto_ftp.sh 内容如下: #!/bin/bash ftp -i -n 192.168.*.* <<FTPIT user username password bin put /data/filename1 /bk/filename1 put /data/filename2 /bk/filename2 quit FTPIT 根据实际情况修改斜体字的内容:    目标服务器的IP地址,ftp用户名和密码,put或者get传递方式,源目录文件和目标目录文件。 如果FTP服务不是默认的端口,是其它端口,比如3000, unix ftp脚本里这 ...
不相同! free(p)指的是收回分配给它的空间,至于收回后p还指向之前的地址,不过里面的内容已经被清空了或者是乱码(这点可以编程输出一下p指向空间的内容,我在不同的机子上试的结果的不同,不过大多数是清空了的。 而赋值为NULL,就是让其指向NULL这个地址。但是分配给p的那块内存不会收回去,这样就会造成内存的浪费! 一般比较安全的写法是:free(p);  p=NULL;即在free之后,再给p赋值为NULL。 原因:free指的是收回分配给p的空间,在内存中将通过malloc给p分配空间后,该块空间就处于已分配状态,当你free后,该块内存就处于空闲即可分配状态。 详细点说就是在 ...
Global site tag (gtag.js) - Google Analytics