我只是一生中第一次熟悉创建库,现在我遇到了问题。

//lib.h
#ifdef DLL_EXPORT
    #define DECLDIR __declspec(dllexport)
#else
    #define DECLDIR __declspec(dllimport)
#endif
...
extern "C" {
    DECLDIR const double MAX_CALC_DUR = 60;
    DECLDIR int stoi(string input);    // C++11 not available on the Code::Blocks version I'm given to work with
}

应用从tutorial中学到的知识,我成功地构建了仅包含stoi()的库,并将其链接到其他项目以供使用。现在,我想添加一个常量,如上面的代码所示。但是,我收到以下错误:
external linkage required for symbol 'MAX_CALC_DUR' because of 'dllexport' attribute

研究使我想到了question,这表明问题可能与MAX_CALC_DUR本质上等同于静态有关。但是,我知道标准库中定义了常量,那么在DLL中定义常量的正确方法是什么?

最佳答案

您可以简单地省略DECLDIR。由于MAX_CALC_DUR具有内部链接(因为它是const),所以每个包含 header 的文件都将照常获得其自己的私有(private)副本,并且一切都会正常进行。

如果可以直接将其插入客户端代码,则无需从DLL中导出某些内容。

10-08 04:44