2014-01-29 4 views
2

uni에서 프로그래밍 과정 용 GSL을 설치하는 데 문제가 있습니다 (코스는 C로 진행됩니다). Visual Studio Express 2012를 사용하고 있습니다.Visual Studio 2012에서 GNU 과학 라이브러리 사용시 문제

미리 컴파일 된 GSL (GnuWin32)을 다운로드하여 실행하고 VS에서 내 링커 및 포함 옵션을 변경했는데 실제로 코드가 제대로 실행되고 있습니다. 내가 예를 들어 다음과 같은 코드를 사용하고 :

#include <math.h> 
#include <stdio.h> 
#include <gsl/gsl_matrix.h> 
#include <gsl/gsl_blas.h> 

int main() 
{ 
    size_t i,j; 

    gsl_matrix *m; 
    m = gsl_matrix_alloc (10, 10); 

    for (i = 0; i < 10; i++) 
    { 
    for (j = 0; j < 10; j++) 
    { 
     gsl_matrix_set (m, i, j, sin (i) + cos (j)); 
    } 
    } 

    for (j = 0; j < 10; j++) 
    { 
    gsl_vector_view column = gsl_matrix_column (m, j); 
    double d; 

    d = gsl_blas_dnrm2 (&column.vector); 

    printf ("matrix column %d, norm = %g\n", j, d); 
    } 

    gsl_matrix_free(m); 
} 

입니다 제대로 실행하고 나에게 정확한 출력을 제공합니다. 그러나 VS가 마지막 중괄호에 도착하면 이상한 메시지가 나타납니다.

"런타임 확인 실패 # 0 - ESP 값이 함수 호출에서 제대로 저장되지 않았습니다. 일반적으로 다른 호출 규칙으로 선언 된 함수 포인터를 사용하여 하나의 호출 규칙으로 선언 된 함수를 호출 한 결과입니다. "

아무도 이런 일을 막을 생각이 있습니까? 나는 인터넷을 샅샅이 뒤졌고, 내가 이해할 수있는 유용한 것을 발견하지 못했다.

+1

들여 쓰기 수준과 어떤 오류 메시지를 볼 수 있도록 코드 서식을 지정하는 데 도움이됩니다. 변경 될 수있는 링크가 아닌 여기에 있어야합니다. – Mark

+0

문제를 설명하는 데 절대적으로 필요한 경우에만 이미지를 사용하십시오. 콘텐츠는 검색 할 수 없으며 프록시 구성으로 인해로드 할 수없는 경우가 많으며 대역폭/데이터가 제한적인 사람들에게 필요한 것보다 커집니다. 대신 텍스트를 질문에 복사하십시오. 감사. –

+0

1. 마지막'gsl_matrix_free (m);'을 생략하면 오류가 지속됩니까? 2. main()은 int를 반환해야하므로 (return code는 C89 코드이므로) 'return 0'이 누락되었습니다. – nos

답변

0

'ESP가 제대로 저장되지 않았습니다'는 ESP를 EBP로 저장하는 표준 asm 코드가 실패했거나 생성되지 않았습니다. 컴파일러 옵션 '생략 프레임 포인터'가 있습니다. 라이브러리 및 기본 코드 모두에 대해 빌드에서 어떻게 설정되었는지 확인하십시오. 둘 다 같은 방식으로 만들어야합니다. 또한 디버거가 작동하게하려면이 옵션을 선택 취소하십시오.

+0

생략 프레임 포인터는 중요하지 않습니다. - ESP는 프레임 포인터의 유무에 관계없이 보존되어야합니다. – MicroVirus