c - 防止 Visual Studio 导出静态库中的函数

标签 c visual-studio static-libraries

奇怪的问题:我正在使用 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 中的函数,因为这些函数 native 存在于实际的可执行项目中。

最佳答案

  • 简单的答案是将 util.obj 中的函数拉到它们自己的库中,并让您的库和可执行文件链接它。
  • 如果您只需要单个源文件中的实用程序函数,您可以将它们移动到 .c 文件中并将它们声明为静态的,这样它们就不会在定义它们的文件之外有任何链接。
  • 如果你真的想通过不导出符号来做到这一点,用__declspec(selectany)标记函数,这将告诉VS函数的多个定义是等价的,它可以自由选择它喜欢(确保它们实际上是一样的!)。

关于c - 防止 Visual Studio 导出静态库中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957043/

相关文章:

.net - 用 Visual C# 或 Visual C++ 编写的程序需要 .NET Framework

c# - 如何使用 C# 在 Windows 上读取连接的 iOS 设备的 UDID?

iOS : Universal framework is creating issue while submitting to app store

c - 为什么我从 scanf 循环中收到段错误?

c - 将指针改组为指向结构的指针

visual-studio - Visual Studio : How to open visual studio in current folder from cmd line

ios - 具有共享依赖项的多个静态库 - iOS

c++ - 基于 Linux 的操作系统,带有静态库 : what can I do?

c - 从两个 128 位 block 中收集四个 32 位字

c - 从 R 矩阵读取/写入 C 数组