2017-05-21 1 views
0

동적 및 정적 라이브러리로 컴파일 된 C++ 라이브러리가 있습니다. 최근에 리소스 버전 파일을 소스에 추가합니다. 동적 라이브러리 편집은 잘 작동하지만 정적 라이브러리 컴파일은 다음과 같은 오류와 함께 64 비트 대상에 대한 실패 시작 : 다음msbuild - 프로젝트에 리소스 파일을 추가 한 후에 정적 lib 컴파일이 실패했습니다.

LINK : warning LNK4068: /MACHINE not specified; defaulting to X86 

x64\Release\dllmain.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86' 

내 컴파일 스크립트입니다

@ECHO OFF 
call "%VS140COMNTOOLS%"\\vsvars32.bat 
SET SourceDir=D:\Projects\MySampleLib 
SET TargetDir=D:\Projects\Packages 

ECHO 32 bit MySampleLib .LIB compilation VS2010 

msbuild.exe %SourceDir%\MySampleLib\MySampleLib.vcxproj /t:Clean;Rebuild /p:Configuration=Release;Platform=Win32;ConfigurationType=StaticLibrary;PlatformToolset=v100 


ECHO 64 bit MySampleLib .LIB compilation VS2010 

msbuild.exe %SourceDir%\MySampleLib\MySampleLib.vcxproj /t:Clean;Rebuild /p:Configuration=Release;Platform=x64;ConfigurationType=StaticLibrary;PlatformToolset=Windows7.1SDK 

오류 때 발생 Lib.exe 명령이 MySampleLib.res

참고 : 오류는 리소스 파일을 추가 한 후에 만 ​​나타납니다. I 은 리소스 파일을 정적 라이브러리에 추가하지 않으려합니다.

+0

정적 라이브러리에 리소스를 추가 할 수 없습니다. 또한 정적 라이브러리가 링크되지 않기 때문에 (최종 실행 파일이 빌드 될 때 연결됩니다.) 정적 라이브러리에 대한 링커를 호출하기 위해 수행 한 작업이 문제의 시작입니다. __Lib.exe__ 명령은 링커가 아닌 라이브러리 관리자입니다. –

+0

@RichardCritten 리소스 파일을 정적 라이브러리에 추가하고 싶지 않습니다. 동적 버전에만 추가했습니다. 내 컴파일 스크립트에서 나는 아무 것도하지 않았다. –

+0

이것이 리소스와 관련이 있다는 것이 확실합니까? 64 비트 오브젝트 파일 (따라서 * 모듈 시스템 유형 'x64'* 언급)을 컴파일 중이지만/MACHINE : x64를 링커에 전달하지 않으므로 (따라서 */MACHINE이 지정되지 않고 기본값으로 설정됩니다. ~ X86 *) 그래서 32 비트 오브젝트 파일을 연결하려고합니다. 64 비트 오브젝트 파일이 주어지기 때문에 작동하지 않습니다. – stijn

답변

0

는 마침내이 정적으로 컴파일 리소스 파일의 연결을 방지

<ItemGroup Condition="'$(ConfigurationType)'!='StaticLibrary'"> 
    <ResourceCompile Include="MySampleLib.rc" /> 
</ItemGroup> 

에 다음 항목 .vcxproj

<ItemGroup> 
    <ResourceCompile Include="MySampleLib.rc" /> 
</ItemGroup> 

를 변경하여 문제를 해결.

관련 문제