2012-08-28 5 views
3

Boost.Test를 사용할 때 일반적으로 main() 함수를 정의 할 필요가 없습니다. Boost.Test가 자체를 제공하기 때문입니다.링커가 Boost.Test를 사용하여 "wrong"main을 선택했습니다.

최근에 타사 라이브러리 (VS2010)의 정적 링크를 사용하도록 프로젝트를 변환해야했습니다. 당연히 빌드에 연결하여 빌드가 성공하고 빌드가 정상적으로 실행되어야했습니다.

그러나 테스트 프로젝트를 실행하면 정말 이상한 일이 발생했습니다. 내 종속 라이브러리 중 하나가 필요로하는 제 3 자 .lib (libpng) 중 하나가 main() 함수가 정의 된 테스트 파일을 포함하고있는 것으로 보입니다 (pngtest.c).
내 프로젝트에 main() 함수가 없으므로 링커에서 해당 "테스트"응용 프로그램을 선택했습니다. 따라서, 내 테스트는 실행되지 않습니다.

내가 이런 일이 발생하지 않도록하는 방법을 아는 사람이 있습니까? 부스터를 사용하도록 링커/컴파일러에게 어떻게 말합니까? main()?

답변

2

내 자신의 질문에 대답하고 @ Tom의 대답을 분명히합니다.
내가 사용하고 있던 libpng 빌드 스크립트는 libpng과 원래의 배송이 아니라 OpenCV 빌드 시스템에 의해 생성 된 스크립트라는 것을 알았습니다. 파일 pngtest.c은 실수로 빌드에 포함되었습니다.

문제의 해결책은 libpng 빌드 스크립트에서 pngtest.c을 제거하는 것이 었습니다.
최신 OpenCV 버전에는이 파일이 더 이상 포함되지 않습니다.

자세한 내용은 여기 my post to Boost mailing listOpenCV bug report here을 참조하십시오.

1

아디, 나도 똑같은 문제가있었습니다. 당신이 이미이 모든 것 같았습니다. Google과 귀하의 노력 덕분에 그것을 파악할 수있었습니다. 여기

대답을 완성하기 위해 몇 가지 정보입니다 :

, 난 그냥에서 pngtest.c 파일을 제외 libpng 프로젝트 및 다시 컴파일 된 OpenCV. OpenCV의 다음 릴리스에서 수정 될 것 같습니다.

감사합니다.