vs项目中的引用是什么意思
来源:互联网 发布:淘宝营销手段 编辑:程序博客网 时间:2024/06/12 01:05
我搬自知乎上的问答,链接如下
点击打开链接
这一个是来自链接的术语,引用即reference.
举一个简单的例子:
// a.cppextern int foo(); // in the foo.oint main(){ foo();}
我们说a.cpp里面使用外面的foo函数,即foo函数本身的定义不在a.cpp里面,那么在链接层面我们会说a.cpp(或者更准确的说是编译出来的目标文件a.o)引用了外部foo函数的符号(Symbol)[1],即我们经常看到的symbol referenced from....,也会看到的错误unresolved symbol of .......。添加引用则是什么呢?如这里的例子,a.cpp(或者更准确的说是编译出来的a.o),链接器需要找到main函数里面使用的foo函数符号,而在a.o里面没有,那么我们则需要添加包含有foo函数的符号,如foo.o,那么你就可以使用ld a.o foo.o,或者说在一个静态库foo.a中,那么则是ld a.o foo.a 所以,添加引用即是添加所需要(引用)的符号用于链接器查找与使用,最后生成目标文件。
推荐书籍:程序员的自我修养。这本书告诉了程序的编译、链接等原理。
[1] 符号,Symbol,这一个来自编译层面的术语。编译器会把源代码层面的函数等作为标记符(identifier),然后把这些标记符放入一个名叫符号表(Symbol Table)的数据结构中。简单的理解的话,可以说把别人写好的程序集添加入自己的程序中。
!答主不熟悉 C++,但 C# 中,引用可是相当有用。
比如我今天从 GitHub 上 Fork 了项目 A。
项目 A 中有很多可供调用的方法,他自己也给自己写有方法。那么*他自己给自己写的方法*,*他自己*是可以调用的。
我将项目 A, Clone 到 本地。
再给我自己的项目 B 添加 A 的引用。
那么等于说,我把 B 的代码 添到了 A 中,现在我可以使用*他给自己写的方法*了。
再举个实际例子。
我有 A 项目 和 B 项目 两个项目。
A 项目 → 直接编译 → A.dll
我在设计 A 项目时,A 项目内有一个 "publicMethods.cs"
这里面包含一个 class, 里面又包含各种常用函数。
比如 public static string time(){return Now.ToString();}
而 A 项目内还有一个 "referring.cs".
referring.cs 里 有一个 public static string gRslt()
而 gRslt() 可以调用 "publicMethods.cs" 里的 public static string gTime(), 因为它们在同一个项目下。
那么现在我编译 A.dll.
我再把 A.dll 添入 B 项目中。
那么现在 B 项目也可以使用 gRslt() 和 gTime() 这两个函数了。
因为我把 A.dll 「引用」到了 B 项目 中。
那么我就可以在 B 项目 中用到 A 项目 的公共函数。
注: C#, Visual Basic .NET 编译后均为 IL 文件(托管代码),所以可以互相自由引用。
所以 C# 和 Visual Basic .NET 也可以很轻松地互相翻译 ——
因为二者编译出来几乎没区别好吗ヾ(゚∀゚ゞ)
- vs项目中的引用是什么意思
- VS中VC++目录中的$是什么意思
- VS项目之间引用问题
- VS项目引用的使用
- vs无法引用项目问题
- vs中项目的外部依赖项是什么意思
- maven项目中的groupid和artifactid是什么意思?
- VS中的项目依赖
- WCF在项目实际生产中的引用方式以及一些引用建议及如何把svcutil.exe加载到VS中的tool中
- UMEditor项目中的引用实例
- Python二次开发是什么意思?python在.net项目中的用途
- eclipse中的web项目引用java项目
- VS C#项目引用C++编写的DLL问题
- java的虚引用是什么意思?
- vs项目中的筛选器(filter)
- VS中的解决方案设置--项目属性
- js中的传引用及传值ref vs value
- VS中的方法名前的引用去掉
- 使用花生壳让外网访问本机服务
- 鸟哥的linux私房菜读书笔记4
- PAT A1085 perfect sequence (25)
- linux ext4无法使用超过16T磁盘的解决办法
- PowerShell遍历文件夹下的子文件夹和文件
- vs项目中的引用是什么意思
- 鸟哥的linux私房菜读书笔记5
- 剑指:矩形覆盖
- 数据库设计一对多、多对多关系
- swift 字符串拼接、截取
- Merge k Sorted Lists
- vmware虚拟机安装XCode进行iPhone真机调试
- 求根结点到指定结点的路径
- mysql 创建索引和删除索引