隐藏静态库的头文件

时间:2014-05-22 05:33:35

标签: c++ linker static-libraries

我有一个我正在整理的CL Math库。为此,我想只公开某些头文件(如CL_Vector.h)。用于处理的所有头文件都隐藏在.lib文件中。

但是,当我尝试在另一个C ++项目中使用我的库时,我会遇到链接器错误。这些链接器错误通常与库中“隐藏”的代码有关。例如,CPP文件:

#include "CL_Calculation_Unit.h"
#include "CL_MathBootstrap.h"
#include "CL_Math_Buffer_Management.h"
#include <stdio.h>

namespace CLMath_Internal
{
    void CalculateVector4(CLMath::CLM_VECTOR4* vec1, CLMath::CLM_VECTOR4* vec2, CLMath::CLM_VECTOR4* output, cl_kernel kernel, size_t workSize)
    {
        CLMath_Internal::CLMathDriver driver = CLMath_Internal::getDriver();

使用此lib的C ++项目引发了我:

  

错误LNK2001:未解析的外部符号“struct CLMath_Internal :: CLMathDriver const&amp; __cdecl CL​​Math_Internal :: getDriver(void)”(?getDriver @ CLMath_Internal @@ YAABUCLMathDriver @ 1 @ XZ)

我在.lib中提供的头文件是这样的:

CL_Matrix.h

#ifndef __CL__MATH__MATRIX__
#define __CL__MATH__MATRIX__

#include "CL_Math_Vector.h"

namespace CLMath
{
      .....

和CL_Vector.h

#ifndef __CL_MATH__VECTOR__
#define __CL_MATH__VECTOR__

namespace CLMath
{
    ....

和CL_Math.h

#ifndef __CL__MATH__
#define __CL__MATH__

#include "CL_Math_Matrix.h"
#include "CL_Math_Vector.h"

namespace CLMath
{

正如您所看到的,我没有包含任何“内部”头文件。相反,我将它们全部移动到需要使用它们的cpp文件中。

所有内部标题都包含在CPP文件中,以“隐藏”它们并使用lib对它们进行无效打包。

如果不是很清楚,我很抱歉。如果我能以某种方式澄清我的问题,请告诉我!

编辑:还要注意我使用Visual Studio和110编译器。也许我的构建设置有问题?

0 个答案:

没有答案