- 浏览: 46366 次
- 性别:
- 来自: 北京
文章列表
在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 ...
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 表中学生标识号相同的所有行。
外连接。外连接可以是左 ...
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后,该块内存就处于空闲即可分配状态。
详细点说就是在 ...