【问题标题】:Auto link static libraries from header file从头文件自动链接静态库
【发布时间】:2018-12-18 11:25:55
【问题描述】:

我正在编写一个供内部使用的库,并且我想自动链接静态库 (.lib) 文件,这样用户就不必知道他们需要的所有库。我们使用 Visual Studio 2015,所以我使用 pragma 解决了一些问题,这似乎有效,但我收到很多警告或警告,我认为这是由我正在做的事情引起的。

警告 LNK4221 此对象文件未定义任何先前 未定义的公共符号,因此它不会被任何链接操作使用 使用这个库

我将此代码包含在所有面向公众的接口头文件中,并将其扩展为包含必要的内部和外部库。

#ifndef GFXK_LIBS_NET_IMPORT__
#define GFXK_LIBS_NET_IMPORT__

#ifdef _DEBUG

#ifdef WIN32
#pragma comment( lib, "gfxk_net_Debug_Win32-v140.lib" )
#else
#pragma comment( lib, "gfxk_net_Debug_x64-v140.lib" )
#endif

#else

#ifdef WIN32
#pragma comment( lib, "gfxk_net_Release_Win32-v140" )
#else
#pragma comment( lib, "gfxk_net_Release_x64-v140" )
#endif

#endif /*_DEBUG*/

#endif /*GFXK_LIBS_NET_IMPORT__*/

我的问题是我如何才能很好地做到这一点,以便我可以删除这个黑客​​工作。我正在寻找类似于 Boost 通过自动链接所做的事情,我不知道如何做到这一点。我不太担心跨平台,因为目前库仅针对 Windows。

【问题讨论】:

  • 这并没有解决问题,但包含两个连续下划线 (__GFXK_LIBS_NET_IMPORT__) 的名称和以下划线后跟大写字母的名称保留供实现使用。不要在你的代码中使用它们。
  • 哎呀,我不是故意的

标签: c++ visual-studio linker static-libraries static-linking


【解决方案1】:

您可以在项目设置Configuration Properties -> Linker -> Input -> Additional dependencies 中指定.libs 路径。您可以为不同的配置和平台指定不同的设置。这将是一个更清晰的方式。

但是在您将函数添加到 .lib 并在项目中使用它们后,警告不会出现。警告只是说这个 pragma-lib 语句毫无意义,因为没有真正导入任何函数。

【讨论】:

  • 感谢您的回答。我现在这样做是为了隐藏链接(例如,我的“压缩”库包括“zlib.lib”)。我想要做的更多是包括一个库自己的库文件,它来自它自己的头文件,这样用户就不必为他们正在使用的所有库执行此操作。只是为了加快用户的开发时间。
猜你喜欢
  • 2015-07-10
  • 2011-03-16
  • 2015-05-06
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多