arm-linux-gcc 나 arm-linux-g++에서 packed에 의한 버그인지좀 봐주세요...
글쓴이: 레모네이드 / 작성시간: 토, 2008/03/15 - 9:19오전
#include <stdio.h> #ifdef _WIN32 #define _packed __attribute__((__packed__)) #else #define _packed #endif struct normal_t { int v; }; #pragma pack(1) struct _packed packed_t { short v; normal_t n; }; #pragma pack() int main() { normal_t n = {1000}; packed_t pk; pk.v = 2000; printf("%d\n",pk.v); pk.n = n; printf("%d\n",pk.v); return 0; }
arm-linux-g++로 컴파일하여 실행한 결과는
2000 1000
vc 및 g++로 컴파일하여 실행한 결과는
2000 2000
union도 아니고...왜 이리 되는지....
packed struct 가 문제를 일으키는거 같습니다..
위의 코드를 vc나 g++ gcc로 컴파일하는겨우에는 문제가 없으나
arm-lunux-gcc나 arm-linux-g++로 컴파일하는 경우에는 문제가 발생하네요...
지금 막연하게 컴파일러 버그인가 추정하고 있습니다..
통신용 코드를 작성하는데 이 문제를 해결해야 해서 골치가 아프네요...
디버깅하다가 스레드부터 뒤지기 시작해서 온 코드 다 뒤지다가 24시간동안 디버깅해서 간신히 찾은 버그가...
위와 같은 코드에서 벌어지는 현상이라니 ....... ㅠㅠ....
Forums:
자답 : 이래저래 하다가...버그 않나는 방법을 찾긴 찾았습니다.
이런 방법으로는 가능한데.... normal_t 구조체에 맴버 데이터가 여러개 인경우에는 각각 전부 따로 할당해야하는 번거로움이 생기네요..
근데 아무리 생각해도 arm-linux-g++가 버그같은데...
우....win,win.ce,lunux,arm-lunux, 다 돌아가게 만드는 코드로 작성하는것은 넘 힘든 작업임에 틀림 없습니다...
이렇게 않하고 할수 있는 방법이 있으면 공유좀 바랍니다....
댓글 달기