Partilhar via


Problemas de inlining da função

Se você estiver usando a função que inlining, você deve:

  • Tem as funções embutidas implementadas no arquivo de cabeçalho que você inclui.

  • Tem inlining ativado no arquivo de cabeçalho.

// LNK2019_function_inline.cpp
// compile with: /c 
// post-build command: lib LNK2019_function_inline.obj
#include <stdio.h>
struct _load_config_used {
   void Test();
   void Test2() { printf("in Test2\n"); }
};

void _load_config_used::Test() { printf("in Test\n"); }

Em seguida, e

// LNK2019_function_inline_2.cpp
// compile with: LNK2019_function_inline.lib
struct _load_config_used {
   void Test();
   void Test2();
};

int main() {
   _load_config_used x;
   x.Test();
   x.Test2();   // LNK2019
}

Se você estiver usando a diretiva do compilador de #pragma inline_depth , certifique-se de ter um valor de 2 ou maior cluster. Um valor de zero desabilitará inlining. Também verifique se você está usando as opções do compilador de /Ob1 ou de /Ob2 .

Misturar embutido e não embutida cria opções em módulos diferentes às vezes pode causar problemas. Se a biblioteca criando c é criada com a função que inlining (/Ob1 ativado ou /Ob2) mas o arquivo de cabeçalho correspondente que descreve as funções tem nenhuma inlining desativado (padrão), você obterá o erro LNK2001. As funções não obtêm será embutida em código do arquivo de cabeçalho, mas desde que não estão no arquivo de biblioteca não há nenhum endereço para resolver a referência.

De forma similar, um projeto que a função do que inlining porém define as funções em um arquivo .cpp em vez de no arquivo de cabeçalho também obterá LNK2019. O arquivo de cabeçalho for incluído em todos lugares julgou apropriado, mas as funções será embutida somente quando o arquivo .cpp passa pelo compilador; em virtude disso, o vinculador consulte as funções como externals não resolvidos quando usado em outros módulos.

// LNK2019_FIP.h
struct testclass {
   void PublicStatMemFunc1(void);
};

em seguida, e

// LNK2019_FIP.cpp
// compile with: /c
#include "LNK2019_FIP.h"
inline void testclass::PublicStatMemFunc1(void) {}

em seguida, e

// LNK2019_FIP_2.cpp
// compile with: LNK2019_FIP.cpp
// LNK2019 expected
#include "LNK2019_FIP.h"
int main() {
   testclass testclsObject;

   // module cannot see the implementation of PublicStatMemFunc1
   testclsObject.PublicStatMemFunc1();
}

Consulte também

Referência

Erro das Ferramentas de Vinculador LNK2019