静态库的inline(内联)函数

各位前辈:

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

4个回答

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

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

casinozyz
casinozyz 但在动态库中可以使用inline,一切正常。在静态库中就只能去掉inline。这是为何?
5 年多之前 回复

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

casinozyz
casinozyz 但在动态库中可以使用inline,一切正常,导出的类。在静态库中就只能去掉inline。这是为何?
5 年多之前 回复

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

casinozyz
casinozyz 我的这个工程最早就是动态库的,采用静态链接方式调用。在动态库里导出了一个类,其中的一些方法是内联的(比如重载了->运算符),使用这个动态库的模块编译链接运行均正常。然而通过调整,将工程改为静态库(lib)后,出现上述问题,只有将inline去掉才正常。麻烦您解释下,谢谢啦~
5 年多之前 回复

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

casinozyz
casinozyz 为什么动态库就可以呢?疑惑~是不是inline的函数在两种编译模式下导出符号有区别呢?
5 年多之前 回复
casinozyz
casinozyz 对,有源代码。动态库中导出了一个类,类的某些成员函数式inline的~
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐