2012-03-25 3 views
0

은 내가 컴파일시 -m64 옵션을 설정하면,이식 네트워크 코드를 64 비트

그러나 잘 32 비트 바이너리를 컴파일 일부 네트워크 IO를 수행하는 프로그램은 내가 아니라 암호 같은 오류

다음 얻을했다 내 프로그램에서이 오류를 유발하는 내 소스 코드 operation_networkio.cc에서
In file included from /usr/include/sys/stream.h:22, 
      from /usr/include/netinet/in.h:62, 
      from /usr/include/sys/socket.h:221, 
      from operation_networkio.cc:15: 
/usr/include/sys/vnode.h:241: error: overflow in array dimension 
/usr/include/sys/vnode.h:241: error: size of array `pad' is too large 

문제가되는 줄은 것 같다

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <netdb.h> 

사람이 내가 누구인지 가르치 려 수 잘못하고 어떻게 치료할 수 있습니까? GCC를 Solaris sparc에서 사용 중입니다.

답변

1

결국 컴파일시 -mfaster-structs 옵션을 사용할 수 있음을 알게되었습니다.

어떤 이유로이 옵션을 제거하면이 빌드 문제가 해결됩니다. 이로 인해 64 비트 빌드가 실패하지만 32 비트 빌드가 작동합니다. 누군가가 설명 할 수 있다면 확실히 이유를 알고 싶습니다

0

이것은 실제로 이상합니다.

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/sys/vnode.h#286

이러한 데이터 구조는 64 바이트를 초과 할 가능성이 안된다. 또는 이러한 데이터 구조를 재정의하는 일부 파일을 포함했을 수도 있습니다. 원인을 확인하려면 C 컴파일러에서 전처리 된 출력을 확인해야합니다.

g++ -E operation_networkio.cc -I... -D... -o preprocessed.cc 

는 명령을 실행 한 후 파일 preprocessed.cc을 살펴 있어야합니다. vn_vfslocks_entry을 검색하여 해당 정의 주변의 코드가 예상 한 것인지 확인하십시오.

관련 문제