静态库问题中的资源

时间:2010-06-09 13:21:52

标签: c++ resources build debugging static-libraries

这不是VC++ resources in a static library的副本,因为它没有帮助:)

我的项目中有一个带有 TWO .rc文件的静态库。当我使用Debug配置构建项目时,我检索到以下错误(MSVS2008):

fatal error LNK1241: resource file res_yyy.res already specified

请注意,这只发生在DebugRelease库构建中,没有任何问题。项目配置中Resources页面的命令行对于每个构建都是相同的:

/fo"...(Path here)/Debug/project_name.res"
/fo"...(Path here)/Release/project_name.res"

我无法理解什么是麻烦。 任何想法?

更新

我不知道为什么会发生这种情况,但当我转向“使用链接时代码生成”选项时问题就消失了。

有人可以解释为什么会发生这种情况吗?我觉得MS编译器在这里做的事情很奇怪。

感谢。

4 个答案:

答案 0 :(得分:4)

通过在设置中设置完整的一个.res输出文件解决了这个问题。 我不确定为什么在Release模式下它没问题。

答案 1 :(得分:4)

我遇到过这篇文章,因为我遇到了相同的链接器错误。

答案中指定的方法在我的系统上产生了一个链接器警告(xyz.res:警告LNK4042:指定了多次的对象;忽略了额外的内容)。

对我有用的是删除" 资源文件名"的条目和#34;文化"在“属性/资源”配置中

答案 2 :(得分:1)

我在探索过程中调用了这个错误,以便从一个大型集合中获取所有构建为dll的一堆依赖项目,这些dll最初都被设置为构建为静态库。我无意中更改了项目引用中的一个项目设置以获取dll构建。重新检查我的更改是否适用于完整的静态库配置,这表明链接错误。因此,对于一个具有包含版本信息的资源文件的特定依赖项目,我将Project Reference Properties: Link Library Dependencies标志设置为True。将其更改为False可修复错误。

顺便说一句,我只需要Dll版本的资源文件,因为我实际上需要将Link Library Dependencies设置为True来修复Dll版本中的链接器错误。所以我最后做的是通过将Yes设置为Excluded From Build来从静态库构建中排除资源文件。

答案 3 :(得分:0)

对我来说,我通过访问我的解决方案资源管理器并排除所有文件来解决问题,然后在项目中重新包含我正在使用的.h和.cpp文件