Почему я получаю ошибки LNK2005 при компиляции DLL расширения PHP - PullRequest
2 голосов
/ 08 марта 2010

Я пытаюсь скомпилировать расширение PHP в VS2008. Это зависит от 3 других проектов, которые я связываю статически. Раньше все работало нормально, когда у меня был весь код в одном файле .cpp. Я разделил код на несколько файлов, чтобы сделать его более управляемым, и теперь он не будет компилироваться.

Я получаю несколько ошибок компоновщика (~ 100 на файл), LNK2005 (уже определено). Я думаю, что все они связаны с библиотекой времени выполнения.

Пока я пробовал

  • Чистая перестройка.
  • Убедитесь, что флаг / MTd одинаков во всех 4 проектах.
  • Убедился, что все заголовки охраняются.

Есть идеи?

РЕДАКТИРОВАТЬ: Вот некоторые из ошибок: Некоторые ошибки:

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 голосов
/ 09 марта 2010

изменить порядок библиотек ссылок, которые могут помочь ... можете ли вы опубликовать некоторые ошибки ... это сделает изображение более четким ...

  1. нажмите Настройки.
  2. нажмите, чтобы выбрать конфигурацию проекта, которая получает ошибки ссылки.
  3. На вкладке «Ссылка» выберите «Ввод» в поле со списком «Категория».
  4. В поле Игнорировать библиотеки вставьте имена библиотек (например, Nafxcwd.lib; Libcmtd.lib).

    Примечание. Эквивалент командной строки компоновщика в /NOD:.

  5. В поле «Объектные / библиотечные модули» введите имена библиотек. Вы должны убедиться, что они перечислены в порядке и в качестве первых двух библиотек в строке (например, Nafxcwd.lib Libcmtd.lib).
...