编译PHP扩展DLL时,为什么会出现LNK2005错误

时间:2010-03-08 17:46:06

标签: php c++ visual-studio-2008 dll linker-errors

我正在尝试在VS2008中编译PHP扩展。它取决于我静态链接的其他3个项目。 当我将所有代码放在一个.cpp文件中时,它曾经工作正常。 我将代码分成几个文件,使其更易于管理,现在无法编译。

我收到了几个(每个文件约100个)链接器错误,LNK2005(已定义)。我认为所有这些都与运行时库相关。

到目前为止,我已经尝试了

  • 清理重建。
  • 确保所有4个项目的/ MTd标志相同。
  • 确保所有标题都受到保护。

有什么想法吗?

编辑:以下是一些错误: 一些错误:

MPQBlock.obj : error LNK2005: _getwchar already defined in MPQArchive.obj
MPQBlock.obj : error LNK2005: _putwchar already defined in MPQArchive.obj
MPQBlock.obj : error LNK2005: _acosl already defined in MPQArchive.obj
MPQBlock.obj : error LNK2005: _asinl already defined in MPQArchive.obj
etc.
MPQFile.obj : error LNK2005: _asinf already defined in MPQArchive.obj
MPQFile.obj : error LNK2005: _atanf already defined in MPQArchive.obj
MPQFile.obj : error LNK2005: _atan2f already defined in MPQArchive.obj
MPQFile.obj : error LNK2005: _ceilf already defined in MPQArchive.obj
MPQFile.obj : error LNK2005: _cosf already defined in MPQArchive.obj
etc.
PHPExtension.obj : error LNK2005: _acosl already defined in MPQArchive.obj
PHPExtension.obj : error LNK2005: _asinl already defined in MPQArchive.obj
PHPExtension.obj : error LNK2005: _atanl already defined in MPQArchive.obj
PHPExtension.obj : error LNK2005: _atan2l already defined in MPQArchive.obj
etc.
zlibd.lib(zutil.obj) : warning LNK4217: locally defined symbol _malloc imported in function _zcalloc
zlibd.lib(zutil.obj) : warning LNK4217: locally defined symbol _free imported in function _zcfree
D:\Server\PHP\ext\php_mpq_library.dll : fatal error LNK1169: one or more multiply defined symbols found

1 个答案:

答案 0 :(得分:0)

更改可能有用的链接库的顺序...你能发布一些错误......它会让图片更清晰......

  1. 点击“设置”。
  2. 单击以选择导致链接错误的项目配置。
  3. 在“链接”选项卡上,单击以在“类别”组合框中选择“输入”。
  4. 在“忽略库”框中,插入库名称(例如,Nafxcwd.lib; Libcmtd.lib)。

    注意/ NOD中的链接器命令行等效项:。

  5. 在“对象/库模块”框中,插入库名称。您必须确保它们按顺序列出,并作为行中的前两个库(例如,Nafxcwd.lib Libcmtd.lib)。