奇怪的问题:我正在使用Visual Studio构建一个静态库,我正在使用一个包含实用程序函数列表的源文件,我也在导入静态库的可执行项目中使用它。结果我得到这样的错误:
4>newfuncs.lib(util.obj) : error LNK2005: _shift_left already defined in util.obj
4>newfuncs.lib(util.obj) : error LNK2005: _chop already defined in util.obj
4>newfuncs.lib(util.obj) : error LNK2005: _crc_begin already defined in util.obj
4>newfuncs.lib(util.obj) : error LNK2005: _crc_update already defined in util.obj
4>newfuncs.lib(util.obj) : error LNK2005: _crc_result already defined in util.obj
4>newfuncs.lib(util.obj) : error LNK2005: _strtok_r already defined in util.obj
任何人都知道如何弄清楚如何让Visual Studio不导出util.obj中的函数,因为它们本身存在于实际的可执行项目中。
答案 0 :(得分:1)
__declspec(selectany)
标记该函数,这将告诉VS函数的多个定义是等价的,并且可以随意选择它们(确保它们'实际上是一样的!)。答案 1 :(得分:1)
所以,想通了:如果使用pragma语句,它会将函数集成到静态库中。在我的情况下,我把:
#pragma comment(lib, "libev.lib")
在标题中,它将libev
导入到我的库中。现在,当我实际编写可执行文件时,我只需要链接到我的库:没有额外的libev
依赖项。