首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LNK4221和LNK4006警告

LNK4221和LNK4006警告
EN

Stack Overflow用户
提问于 2010-03-23 06:44:28
回答 1查看 2.2K关注 0票数 1

我正在制作自己的静态库。我已经将运行正常的代码放入一个静态库中,以供另一个程序使用。在我的库中,我使用了另一个静态库,我不想让将要使用我的API的人知道它。因为我想对他们隐藏信息,所以我不能告诉他们安装另一个静态库。无论如何,我使用命令行Lib.exe提取并创建了一个较小的库文件,其中只包含我使用的obj。但是,对于我使用的每个obj,我都会收到一堆LNK4006 :second definition ignored链接器警告,然后是LNK4221 no public symbols found;archive member will be inaccessible

我正在用vs2008做这项工作,我不确定我做错了什么。我在.cpp文件中使用了#pragma comment行,我还修改了库管理器,添加了较小的.lib及其位置。我的代码只是简单地调用了几个函数,它应该能够从较小的库中的那些Obj文件中获得这些函数。我所有的功能都是在.cpp文件中实现的,我的头文件只包含了第三方的头文件和标准的c++头文件。没什么花哨的。我在自动取款机中实际上没有函数定义。我将把API定义放在里面,并在.cpp中实现我将要创建的这个静态库。然而,我只是想在添加更多代码之前构建我的代码。

我确实阅读了http://support.microsoft.com/default.aspx?scid=kb;EN-US;815773,但它并没有提供解决方案。

EN

回答 1

Stack Overflow用户

发布于 2010-03-23 06:56:35

即使您从另一个库中提取所有对象并将它们放入您自己的库中,您的用户仍然能够看到您的库中的内容,从而看到所有的对象名称。在许多情况下,对象的名称将揭示您正在使用的其他库的实际内容。

与其将库作为静态库分发,不如考虑将其作为DLL分发。在DLL中,你可以很容易地隐藏所有底层的东西,只公开你想公开的东西。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2496293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档