2016-07-11 8 views
0

기능을 추가하기 위해 프로그램에서로드되는 모듈을 작성하고 있는데, 이해할 수없는 정말 이상한 충돌을 발견했습니다.Eigen을 사용하는 플러그인이 두 번째로 실행될 때 오류가 발생합니다.

우선, 나는 문제없이 작동하는 MSVS2015를 사용하여 Windows에서 똑같은 것을 컴파일했습니다. 그러나 유닉스 (Solaris 10)에서 GCC 4.9.3을 사용하여 컴파일 할 때 세션이 두 번째로 코드가 실행될 때 충돌이 발생하고 충돌을 일으키는 부분을 다소 좁히도록 관리했습니다. Eigen :: MatrixXf 객체를 복사합니다.

이 충돌하게 아주 간단한 예를

는 다음과 같습니다 : 그러나

void entry() 
{ 
    // Initialize matrix1 
    Eigen::MatrixXf test(3, 3); 

    // Fill it with 3x3 values. 
    test << 1, 2, 3, 4, 5, 6, 7, 8, 9; 

    // Initialize matrix2 
    Eigen::MatrixXf test2(3, 3); 

    // Copy 
    test2 = test; 
} 

, 복사 행렬을 포함하지 않는 것은 완벽하게 잘 작동하는 것 같다, 그리고 모든 것을 나는 아주 간단한 실행 프로그램을 빌드 할 때, I 배열을 잘 복사 할 수 있습니다.

내 메이크의 인수를 좁힐 관리했지만, 아무런 차이가 없습니다 :

CC_FLAGS = -I$(INC) -fPIC 
LINK_FLAGS = -shared 

나는 이것에 대한 원인이 될 수 있는지에 관해서는 아이디어에서 정말이야, 그래서 난 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 나는 유닉스 개발에 대해 아주 익숙하지 않고 이것을 디버깅하는 가장 좋은 방법이 무엇인지 확신 할 수 없다.

솔라리스 10 (x86) 용 공식 바이너리가 없었기 때문에 gcc 버전을 직접 빌드해야했지만, 오류가 없었으며이 버전 이외의 다른 모든 버전에서는 잘 작동합니다.

감사합니다.

+0

Eigen의 버전은 무엇입니까? –

+0

죄송합니다. 언급하지 않았습니다. 최신 안정 버전입니다 : 3.2.8. –

+1

우분투에서 gcc 4.9.2로 재현 할 수 없습니다. [MCVE]를 만들 수 있습니까? –

답변

0

이상하게도 최적화 (-O2/-O3)로 컴파일하면이 문제가 해결됩니다.