首页 > 解决方案 > C++ 链接到静态库

问题描述

我有一个输出动态库的 c++ 项目“A”。我希望这个库链接到我制作的静态库“B”。问题是我undefined external symbol在编译时出错。我尝试将“B”配置为动态库并且链接工作正常,但要求是动态库链接到静态库。

我的问题是:

  1. 可能影响此类链接的静态库和动态库之间可能有什么不同?
  2. 使用静态库时,我想使用的所有符号都应该dllexport编辑吗?如果是,为什么链接到动态库时不需要使用

编辑

在B项目中,我有以下内容:

头文件

#define APICALL extern "C"  __declspec(dllexport)
#define STACKMODE   __stdcall

APICALL void STACKMODE GenerateTIERJ_PAM4(double * timeVals, double * YVals, double * smoothedYVals, double lineRate, double ratio, double*tiePts, double * timeIndexes, double *RJ_RMS, int cntData);

源文件

APICALL void STACKMODE GenerateTIERJ_PAM4(double * timeVals, double * YVals, double * smoothedYVals, double lineRate, double ratio, double*tiePts, double * timeIndexes, double *RJ_RMS, int cntData)
{
    //Doing some stuff
}

在一个项目中,我直接使用这个函数

extern "C" __declspec(dllimport)void GenerateTIERJ_PAM4(double * timeVals, double * YVals, double * smoothedYVals, double lineRate, double ratio, double*tiePts, double * timeIndexes, double *RJ_RMS, int cntData);

尝试将 B 用作动态库时,它可以工作,但是当尝试将其用作静态库时,我得到以下信息

错误 LNK2019 未解析的外部符号 __imp_GenerateTIERJ_PAM4 引用 > 在函数“公共:静态双 __cdecl >Filters::ProcessScopeSamplesForTIE

标签: c++static-linking

解决方案


推荐阅读