Bir PHP uzantısı DLL derlerken neden LNK2005 hataları alıyorum

1 Cevap php

I'm trying to compile a PHP extension in VS2008. It is dependent on 3 other projects which I link statically. It used to work fine when I had all my code in one .cpp file. I separated the code into several files to make it more manageable and now it won't compile.

Ben alıyorum birkaç (~ 100 dosya başına) bağlayıcı hataları, (önceden tanımlanmış) LNK2005. Hepsi bence ilgili çalışma zamanı kütüphane vardır.

Bugüne kadar ben denedim

  • Temiz yeniden.
  • / MTd bayrağı 4 projelerde aynı olduğundan emin yaptı.
  • Tüm başlıkları korunuyor emin yaptı.

Herhangi bir fikir?

EDIT: Here are some of the errors: Some errors:

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 Cevap

yardımcı olabilecek bağlantı kitaplıkları sırasını değiştirmek ... Eğer bazı hatalar duyurabilirsiniz ... bu resim daha net hale getirecek ...

  1. Ayarlar 'ı tıklatın.
  2. bağlantı hataları oluyor proje yapılandırmasını seçmek için tıklatın.
  3. Bağlantı sekmesinde, Kategori açılan kutuda Girişi seçmek için tıklatın.
  4. Ignore kütüphaneler kutusunda, kütüphane adları (; Libcmtd.lib örneğin, Nafxcwd.lib) takın.

    / NOD linker komut satırı eşdeğeri Not:.

  5. Nesne / kitaplık modüllerini kutusunda, kütüphane isimleri takın. Bu düzeni ve hat (örneğin, Nafxcwd.lib Libcmtd.lib) ilk iki kütüphane olarak listelenen emin olmalısınız.