问题思考: 有没有一种方式,让别人用你源码实现的功能,只给你声明,不给你源码?
程序编译过程:预编译 - 编译 - 链接, 编译生成obj文件,最后链接生成可执行文件。
那么就可以把源码的obj文件给别人,让使用者链接使用
实验验证:
生成obj文件
先创建四个文件
编译之后,难么这个连个obj文件就可以给别人使用了;
使用UseObj文件
创建工程使用UseObj,把obj的头文件放进来,编译肯定是报链接错误
obj文件使用方式1:
把obj文件直接拖进项目,参加编译就可通过;
obj文件使用方式2:
文件放到相应的路径下,然后链接选项里加入这个
问题:
这两个obj文件可以给C使用嘛? 怎么样才可以既能给C使用,也能给C++使用?
名称粉碎规则不同,不能使用
c语言中使用Obj文件
创建一个C语言项目,同样需要把四个文件拖进来,把后缀的cpp修改为C,编译结果提示这个文件名有误,找不到文件名
名称粉碎规则要向前兼容,使用C的粉碎规则,C++中同样适用
在obj项目中中重新生成obj文件
C项目中头文件和obj文件更新后报错;
extern “C”是C++中使用的,是为了C++兼容C使用的,在C项目中无法使用;
那么在C项目中使用要去掉,在C++项目中使用要加上;
重新生成obj文件,对生成的函数名称规则做一个限制,使用内置宏来判断
C++中加上兼容C的 extern "C"
C 中去掉 extern "C"
最后在C/C++中使用
成功在C中使用
成功在C++中使用
这种方式实现了让别人使用功能,但是不给源码;
每个CPP都有一个obj,非常麻烦;
为了解决这种麻烦,就有了静态库技术,静态库把所有的obj文件合成一个文件;
标签:文件,obj,win,C++,编译,源码,使用 From: https://www.cnblogs.com/awmking/p/17016907.html