LNK4221和LNK4006警告

时间:2010-03-22 22:44:28

标签: c++

我正在创建自己的静态库。我已经采用了可行的代码,现在将其放入静态库中供另一个程序使用。在我的库中,我正在使用另一个静态库,我不希望那些将使用我的API的人知道。因为,我想隐藏这些信息,我无法告诉他们安装其他静态库。    无论如何,我使用命令行Lib.exe来提取和创建一个只有我使用的obj的较小的lib文件。但是,我为每个使用后跟LNK4006 :second definition ignored的obj收到了一堆LNK4221 no public symbols found;archive member will be inaccessible个链接器警告。

我在vs2008中做这项工作,我不确定我做错了什么。 我在.cpp文件中使用#pragma comment行 我还修改了图书管理员以添加我的小.lib及其位置。 我的代码只是调用一些函数,它应该能够从较小的lib中的那些Obj文件中获取。 我的所有函数都在.cpp文件中实现,我的标题只包含第三方头文件,并且是标准的c ++头文件。没有什么花哨。我实际上没有函数定义。我打算将API定义放在那里,并在.cpp中实现我将要创建的静态库。但是,我只想在添加更多代码之前构建我的代码。

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

1 个答案:

答案 0 :(得分:3)

即使您从其他库中提取所有对象并将它们放在您自己的库中,您的用户仍然可以查看库中的内容,从而查看所有对象名称。在许多情况下,对象的名称将显示您正在使用的其他库。

不要将库作为静态库分发,而应考虑将其作为DLL分发。在DLL中,您可以轻松隐藏所有基础内容,并且只公开您想要公开的内容。