静态库的inline(内联)函数

问题描述

静态库的inline(内联)函数

各位前辈:

我在静态库(*.lib)里实现了一个类,类的一些成员函数是inline的,静态库可以成功生成。但如果在其他模块使用这个静态库中的类时,会提示“LNK2001 无法解析的外部符号...”链接错误。去掉静态库中的成员函数前的inline关键字,则可以正常使用该静态库。这是正常的吗?我是不是有什么没有注意到的地方?还是inline的使用有限制?望各位前辈不吝赐教,十分感谢!

解决方案

这是显然的,没有源代码怎么内联呢。

所谓内联,就是指,把函数中的代码嵌入调用的位置,如同不存在函数调用一样。

解决方案二:

inline直接进行代码替换了。你外部没法访问到你的实现

解决方案三:

动态库也是不可以的,不信你再试试看。

解决方案四:

你说的动态库是指你拥有源代码,自身导出函数是不是?如果是外部的函数,怎么可能内联呢。

时间: 2024-11-02 00:33:59

静态库的inline(内联)函数的相关文章

(一〇二)内联函数

元旦了,各种打不开博客.元旦结束,博客好了,是因为元旦放假程序员都回家了嘛? -------------------------------- 内联函数和普通函数有所区别.   普通函数需要①函数定义②函数原型③函数调用,具体调用形式是,先调用时,储存当前函数的内存地址(假设为地址A),然后调用函数,跳到被调用函数的内存地址(地址B),然后在地址B处依次执行,等执行完被调用的函数(或许还有返回值),再返回之前储存的地址A处.   内联函数,可以省略②函数原型(也可以不省略),但需要在函数定义和函

C++中的内联函数(inline)

在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数. 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭. 下面我们来看一个例子: #include <iostream>#include <string>using na

C语言中的内联函数(inline)与宏定义(#define)详细解析_C 语言

先简明扼要,说下关键:1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快. 2.内联函数可以调试,而宏定义是不可以调试的.内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline.下面详细介绍一下探讨一下内联函数与宏定义. 一.内联函数是什么?内联函数是代码被插入到调用者代码处的函数.如同 #define 宏(但并不等同,原因见下文),内联函数通过避免被调用的开销来提

内联函数inline与宏定义深入解析_C 语言

内联函数的优越性:一:inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏定义一样展开),没有了调用的开销,效率很高.二:类的内敛函数是一个真正的函数.三:使用内联函数inline可以完全取代表达式形式的宏定义. 例子: 复制代码 代码如下: Class A{public:int readTest(){return nTest:}void setTest(int i);};inline void A::setTest(int i){nTest=i;}; 说明:类A

c++内联函数(inline)使用详解_C 语言

介绍内联函数之前,有必要介绍一下预处理宏.内联函数的功能和预处理宏的功能相似.相信大家都用过预处理宏,我们会经常定义一些宏,如 复制代码 代码如下: #define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏. 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行.因此,函数调

重构——2内联函数(Inline Method)

内联函数(Inline Method) 一个函数本体与名称同样清楚易懂,在函数调用点插入函数本体,然后移除该函数. 一.动机 1.非必要的间接性总让人不舒服 2.把组织不合理的一群函数重新组织 3.并不是所有的间接层都有价值,委托太多,会让人晕头转向 二.做法 1.检查函数,确定它不具多态性 2.找出这个函数所有的被调用点 3.将这个函数所有的调用点都替换为函数本体 4.编译,测试 5.删除该函数的定义

如何调试C/C++内联函数及过程

这篇文章描述了一种持续的权衡方法,可以在调试程序和使之运行 更快之间取得正确的平衡.这篇文章同时还描述了如何调试内联函数及过程. 编写一个运行得快的程序并不容易.编译器可以帮助将一个程序转换成运行得更加快,但权衡是转换之后的程序与初始的程序会有所不同.在某些作了积极优化转换(aggressive optimization transform)的情形里,从人类的角度看转换后的程序与初始程序相比较已经几乎没有可读的一致性了. 因此,调试有问题的已优化程序会更加困难.这是一个问题,因为为了获得最大化的

拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

 1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: #include<iostream> //如果声明已经定义,边不会生成 class classA { private: int a; int b; public: //拷贝构造的规则,有两种方式实现初始化 //1.一个是通过在后面:a(x),b(y)的方式实现初始化 //2.第二种初始化的方式是直

C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针

   目  录 1       开始学习C++.............................................................................................................. 4 1.1       C++的头文件...............................................................................................