[App 개발] 유니버설로 라이브러리 빌드시 arch = prescott ?
본문
make all-recursive
Making all in cxcore
Making all in src
/bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../../cxcore/src -I../.. -I. -I../../../cxcore/include -I../../.. -DNDEBUG -Wall -fno-rtti -pipe -O3 -g -march=prescott -ffast-math -fomit-frame-pointer -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -c -o dummy.lo ../../../cxcore/src/dummy.cpp
g++ -DHAVE_CONFIG_H -I. -I../../../cxcore/src -I../.. -I. -I../../../cxcore/include -I../../.. -DNDEBUG -Wall -fno-rtti -pipe -O3 -g -march=prescott -ffast-math -fomit-frame-pointer -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -c ../../../cxcore/src/dummy.cpp -fno-common -DPIC -o .libs/dummy.o
cc1plus: error: invalid option 'arch=prescott'
lipo: can't open input file: /var/tmp//ccl9xOgY.out (No such file or directory)
make[3]: *** [dummy.lo] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
라이브러리를 유니버설로 빌드해 보기 위해 configure를 하고 make를 했는데 위에 보는 것 처럼 arch=prescott 이라는 게 생겨서 에러라고 나왔습니다. configure시 옵션은 라이브러리 문서에서 하라는 대로 했고요..
이상한 에러 입니다. 흠... 프레스캇은 펜티엄의 코드명이 아니었나...
최신글이 없습니다.
최신글이 없습니다.
댓글목록 11
hongjuny님의 댓글
저, 이것은 어떤 라이브러리 인가요? OpenCV 인가요? OpenCV 는 제 맥북 프로에서는 무사히 유니버설로 컴파일이 되고 있는데요... ^^;;;
wlee님의 댓글
OpenCV 맞습니다. 제 시스템에서는 에러가 나네요. Mac os x opencv port 에 나온대로
./configure CFLAGS="-arch i386 -arch ppc" CXXFLAGS="-arch i386 -arch ppc" --disable-dependency-tracking
라고 해주고 빌드하면 위와 같이 에러가 나더군요.
hongjuny 님 pc 에서는 잘 된다니 ... 이상하네요.
hongjuny님의 댓글
한번
./configure CFLAGS="-arch i386 -arch ppc"
만 넣고 컴파일 해 보세요.
제 생각에 -march=prescott 은 없애 주어야 옳다고 생각이 되는데... configure 파일 내용을 수정해야 될 것 같습니다. 일단은 인텔 맥 쓰시죠? 그렇다면 이렇게 하면 컴파일은 될 겁니다. -_-;;
wlee님의 댓글
빌드된 라이브러리가 유니버설 이라는 것은 어디서 확인할 수 있는지요 ?
hongjuny님이 말씀하신 대로, CPPFLAG 만 사용하여 빌드된 라이브러리를 통해서 OpenCV 프로그램을 XCODE에서 빌드하는 경우.. 여전히
/usr/bin/ld: warning /usr/local/lib/libcv.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
'라이브러리의 cpu 타입이 정해진 -arch flag :ppc 와 다르다'는 에러가 납니다. (Release mode 빌드시..) 프로젝트 셋팅을 유니버설이 아닌 current os로 맞추어 놓아도 에러는 똑같네요. 이 경우 라이브러리는 i386 용인데 프로젝트가 ppc 용으로도 빌드를 하려고 하기 때문에 나오는 에러인지... .
hongjuny님의 댓글
저도 열심히 배워가며 공부해가며 답글 달고 있음을 알려드리고요... ㅎㅎㅎ
OpenCV 정말 괜찮은 것 같네요. 저도 한 번 써봐야겠습니다.
그나저나, configure 파일 내부를 훑어보니 유니버설 컴파일은 물 건너간 듯 보입니다.
configure 에서는 현재 컴파일하는 컴퓨터 기종에 따라서 플래그를 설정해 주는데, i*86-apple- 일 때에는 무조건 -march=prescott 으로 설정을 해 버리더군요. 아시다시피 컴파일 인스트럭션을 프레스캇으로 설정하면 P4 인스트럭션 및 sse, sse2, sse3 을 모두 활용해서 옵티마이징을 수행하겠지요. -_-; 주석문은 더 가관인 것이, "어쨌든 애플 기계중에 prescott 이전 기종은 없지 않느냐" 라고 하고 있습니다. ㅠㅠ
그 밑에는 powerpc- 일 경우도 설정되어 있는데, -mtune=G5 로 되어 있습니다. 당근 G5 의 64 비트 레지스터 및 AltiVec 을 이용해서 최적화를 할 것이고요.
Xcode 가 유니버설로 컴파일된 라이브러리만을 로딩하는 것은 거의 자명한 사실인 것 같습니다. 이렇게 된다면 커맨드 라인으로 컴파일을 하든지 아니면 약간 번거롭더라도 Framework 으로 만들어 주는 작업이 필요한 듯 싶습니다. -_-;;
제 짧은 소견으로 드리는 의견입니다. 혹시 좋은 정보 알아내시면 알려주세요. 감사합니다.
hongjuny님의 댓글
wlee 님...
저, 이런 것을 발견했습니다.
<a href=http://www.lestang.org/article45.html target=_blank>http://www.lestang.org/article45.html </a>
벌써 어떤 대단한 사람이 이미 OpenCV 를 Framework 으로 만들어 놓았더군요. ㅠㅠ
wlee님의 댓글
늦게까지 안 주무시는 군요 ^^
위 사이트는 저도 참조했었습니다. 엑스코드 프로젝트가 있었는데 아직 사용은 안 해 봤구요...
OpenCV 1.0.0 도큐멘트를 보면 유니버설로 빌드가 된다고 쓰여있는데 이게 유니버설 바이너리가 아니라 그냥 ppc와 인텔맥 양쪽에서 빌드가 된다는 얘기인가 봅니다. 제 후배는 ppc에서 OpenCV 빌드 후 잘 쓰고 있거든요.
엑스코드는 ... 한 번 알아봐야겠네요 ^^
hongjuny님의 댓글
지금 저 사이트의 프로젝트를 약간 손보아서 1.0.0 에 대응하게끔 만들고 있습니다. 그런데 딱 한 가지 찝찝한 부분이 남아있어서... 그것만 확실히 하면 될 것 같습니다. 유니버설로 샘플 컴파일 다 잘 되고 동작 잘 되고 있습니다. ^^
아 그리고 저는 미국이고요... 지금 몰팅 중입니다. ㅠㅠ
hongjuny님의 댓글
네. 위키에 소개되어 있는 configure 플래그 설정 밑에 한 줄이 더 있지요...
아직 실험해보지 않은 거라고... ㅠㅠ
hongjuny님의 댓글
헐... 이것이 프레임웍으로만 만들어놓았을 뿐 전혀 포터블하지가 않군요. -0-;;
wlee님의 댓글
미국이셨군요 . ^^
전 그 샘플 프로젝트로 빌드하다가 실패했습니다.
cxcore 빌드시 링크 에러가 나더군요.