我有一个我正在整理的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 CLMath_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编译器。也许我的构建设置有问题?