2010-03-08 6 views
2

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 
+1

''을 포함하기 전에 ''을 포함하십시오. 내 생각에 이것은 PHP가 "인라인"을 재정의하여 발생했다고 생각합니다. – Artefacto

+0

Artefacto - 효과가있는 간단한 솔루션. 감사! –

답변

0

변화에 도움이 될 링크 라이브러리의 순서 ... 당신은 사진을 만들 것입니다 ... 다음은 몇 가지 오류를 게시 할 수 있습니다 더 명확하게 ...

  1. 설정을 클릭하십시오.
  2. 링크 오류가 발생하는 프로젝트 구성을 선택하려면 클릭하십시오.
  3. 링크 탭의 범주 콤보 상자에서 입력을 선택하려면 클릭하십시오.
  4. 라이브러리 무시 상자에 라이브러리 이름 (예 : Nafxcwd.lib; Libcmtd.lib)을 삽입하십시오.

    참고/NOD :에서 링커 명령 줄과 동일합니다.

  5. 개체/라이브러리 모듈 상자에 라이브러리 이름을 삽입하십시오. 이러한 라이브러리가 순서대로 나열되어 있고 라인의 처음 두 라이브러리 (예 : Nafxcwd.lib Libcmtd.lib)인지 확인해야합니다.
+0

질문을 편집하고 몇 가지 오류가 있습니다. –

관련 문제