VS2008에서 PHP 확장을 컴파일하려고합니다. 그것은 정적으로 링크 3 다른 프로젝트에 의존합니다. 하나의 .cpp 파일에 모든 코드가있을 때 제대로 작동했습니다. 코드를 더 쉽게 관리 할 수 있도록 여러 파일로 분리 했으므로 이제는 컴파일되지 않습니다.PHP 확장 DLL을 컴파일 할 때 LNK2005 오류가 발생하는 이유
링커 오류 LNK2005 (이미 정의 됨)가 여러 개 있습니다 (파일 당 ~ 100 개). 그들 모두는 내가 생각하는 런타임 라이브러리 다.
은 지금까지 나는
- 청소가 다시을 시도했습니다.
- /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
''을 포함하기 전에 ''을 포함하십시오. 내 생각에 이것은 PHP가 "인라인"을 재정의하여 발생했다고 생각합니다. –
Artefacto
Artefacto - 효과가있는 간단한 솔루션. 감사! –