2016-08-18 2 views
-1

일부 텍스트 파일을 구문 분석하고 레코드를 SQL Server 데이터베이스에 삽입하는 매우 간단한 응용 프로그램이 있습니다.응용 프로그램에 대한 종속성 누락?

"그것은 나를 위해 작동"하지만 다른 컴퓨터에서 실행되는 다음 줄에 충돌 : 그게를 때문에,

cmr->dateTimeStamp = TIMESTAMP_STRUCT { }; 

나에게 어느 TIMESTAMP_STRUCT 관련이 누락 된 의존성이 있다는 뜻, 즉 프로그램에서 그 전에 나타나지 않은 그 행의 유일한 것.

TIMESTAMP_STRUCT와 SQLUSMALLINT는 sqltypes.h에 정의되어 있으며, typedef 일 뿐이므로 어쨌든 typedef 일 뿐이므로 거기에 의존성이있을 것으로 기대하지는 않습니다.

SQL Server 기본 클라이언트 11과 Visual C++ 런타임을 대상 컴퓨터에 설치했습니다.

내가 누락 될 수있는 다른 방법이 있습니까?

Visual Studio 2015 및 대상 컴퓨터는 Windows Server 2008 R2입니다.

두 컴퓨터에서 동일한 입력 파일을 사용하고 있지만 한 컴퓨터에서만 실패합니다.

+0

어떤 부분이 문제를 일으키는 지 알아 내기 위해 여러 조각으로 나눌 수 있습니까? 예외 처리를 구현하여 오류를 캡처하고 앱을보다 정상적으로 종료 할 수 있습니까? – techspider

+0

'cmr'은 아마도 이전 오류에서 NULL 일 것입니다. 원격 디버거 (응용 프로그램이 충돌하는 컴퓨터)를 설치하고 개발 컴퓨터에서 테스트/릴리스 컴퓨터로 원격 디버깅하여 오류를 찾으십시오. FYI : 누락 된 종속성에 대해 누락 된 부분을 정확하게 알려주는 대화 상자가 나타납니다. –

+0

C API의 예외에는 여러 번 잘못된 설명이 들어 있습니다. 나는 때로 MFC 레이어를 사용한다. 너는 정확히 무슨 예외가 있니? –

답변

0

문제는 컴파일러 플래그로 내려갔습니다.

이 프로젝트는 전혀 관련이 없으며 AVX 지침이 포함 된 장난감 응용 프로그램으로 시작되었습니다. 명령 세트를 대상으로하는 플래그는 "실제"응용 프로그램이되었을 때 결코 해제되지 않았습니다.

해당 컴파일러 플래그 (/ arch : AVX)를 제거하면 프로그램이 두 시스템에서 작동합니다. 나에게 이상한 점은이 프로그램에서 AVX 명령어가 없다는 것입니다. 그렇다면 플래그가 설정된 이유는 두 머신 간의 실행에 차이가 발생하게되는 이유입니다. 특히 기본 유형으로 구성된 구조체의 초기화와 같이 무해한 이유가 무엇입니까?

+0

어떻게 결정 했습니까? 꽁꽁 얼룩 코드를 보셨나요? – doug

+0

무엇을 구체적으로 결정 하시겠습니까? – dodexahedron

+0

장난감 응용 프로그램에 AVX 명령어가있어서 거기에 넣었습니다. 특정 코드에 미칠 영향을 테스트하고있었습니다.컴파일러 플래그가 현재 응용 프로그램에 영향을 미쳤다는 것을 어떻게 알 수 있습니까? 플래그를 켜고 한 번 실행 했으므로 플래그를 끈 상태에서 한 번 실행했습니다. 현재 응용 프로그램에 AVX 명령어가 없음을 어떻게 알 수 있습니까? 컴파일러가 플래그가 설정되어 있기 때문에 기회 주의적으로 사용하는 경우에는 그렇지 않습니다. 내가 어디서 어떻게 사용했는지 알 수는 없지만 VS의 어셈블리 출력에는 AVX 명령어가 표시되지 않으므로 손실이 발생합니다. – dodexahedron

관련 문제