2010-04-21 8 views
1

AIX에서 xlc/xlC 컴파일러로 크로스 컴파일하려고합니다.C++에 대한 AIX xlC 교차 컴파일/링 케이션 C 심볼을 찾을 수 없음

다른 컴퓨터에서 기본 설정을 사용하면 코드가 성공적으로 컴파일됩니다. 코드는 실제로 교차 컴파일과 함께 성공적으로 컴파일되지만 문제는 링커에서 발생합니다. , .setsockopt (INT, INT, INT, const를 무효 *, 부호 없음 long) : 나는 코드를 연결하려고하면

$(CHILD_OS)/usr/vacpp/bin/xlC -q32 -qnolib -brtl -o $(EXECUTABLE) $(OBJECT_FILES) 
-L$(CHILD_OS)/usr/lib 
-L$(CHILD_OS)/usr/vacpp/lib/profiled 
-L$(CHILD_OS)/usr/vacpp/lib 
-L$(CHILD_OS)/usr/vac/lib 
-L$(CHILD_OS)/usr/lib 
-lc -lC -lnsl -lpthread 
-F$(CHILD_OS)$(CUSTOM_CONFIG_FILE_LOCATION) 

, 나는 몇 가지 정의되지 않은 심볼을 얻을이 함께 개체를 연결하는 명령입니다.

실종 된 기호가 표준 c 라이브러리 libc.a에서 발견 된 것을 발견했습니다. 픽업되는 libc.a에 대해 nm으로 심볼을 검색했을 때 심볼이 실제로 존재합니다. 나는 C++에서 C 객체를 읽을 수 없다는 문제가있을 것이라고 생각하지만 실제로는 어둠 속에서 촬영 중입니다.

답변

1

C++ 이름 맹 글링 문제 일 수도 있습니다.

대상 파일에서 nm을 실행하여 찾고있는 기호를 찾으십시오. 그런 다음 정확한 이름을 도서관과 비교하십시오.

그런 다음 컴파일 명령을 확인하여 헤더 파일의 올바른 버전이 포함되었는지 확인하십시오. 실수로 상위 운영 체제의 사본을 포함 할 수 있습니까?

+0

상위 운영 체제의 헤더 파일이 포함되어 있는지 의심 스럽습니다 (-qnolib 및 -qnostdinc는 xlc/xlC와 동일합니다). 나는 포함 된 라이브러리 디렉토리 아래에서 libc.a에 대해 nm을 실행했으며 모든 심볼이 발견되었습니다. 불행히도 좋은 제안은 이미 시도되었습니다. – bogertron

+0

오브젝트 파일에 대해 nm을 실행하여, 찾고있는 실제 심볼을 찾으십시오. xlc에 나열된 심볼은 C++ 참조의 디맹 글드 버전처럼 보입니다. –

0

결국이 문제를 해결할 수있었습니다. .c 파일에 C++ 컴파일러를 사용하고있는 것처럼 보입니다. C 파일 용 xlC 컴파일러 대신 xlc 컴파일러를 사용하면이 문제가 해결됩니다.