有一个静态库,里面中有一个类成员函数的定义中加上inline,可以编译通过,生成一个静态库,但是引用这个库的程序编译时总是报告这些加上inline的成员函数是无法解析的外部符号(去掉inline后两个项目都重新编译是可以的),为什么呢?我想但是我想将那些函数定义成inline怎么做呢?
inline,编译器可能会进行函数内联,也就是直接展开这个函数的代码,因而就没有这个函数名称了,对外来说,调用就找不到这个函数实现了。所以你需要导出的函数不应该进行内联
所谓inline,就是编译器实际不产生函数和函数调用,而是将函数实现直接内嵌在调用的代码处
既然如此,在你的静态库中定义一个inline函数,又要调用者看见它怎么可能呢?C++编译器只能将源代码嵌入,而没办法从外部库中将机器代码嵌入。
在vs跟g++下编译inline实际上是有区别的 最佳答案描述的没错 但是若G++不能连接而VS可以的话 可能是另一个原因引起的
就是inline的定义跟实现分离了。。这是vs跟gcc在编译时的索引方式不同导致的