[팁] [질문] 외부 라이브러리 다시 한번 ~
본문
외부 라이브러리를 External Frameworks and libraries 폴더에 추가하기 위해,
오른쪽 버튼 -> Add->existing files.. 를 선택해서 추가하려고 해도
파일을 열기위해 보여주는 다이얼로그를 통해서는
/usr/local/lib 폴더에 접근을 허용하지 않기 때문에 추가를 할 수가 없더군요.
결국 다른 로컬 폴더에 라이브러리 파일들을 복사하고 그곳을 지정해서 파일을
추가해서 해결은 했습니다만 왠지 정석이 아닌 것 같아서 좀 찜찜합니다.
이런 경우 어쩔 수 없는 건가요 ?
질문 2.
XCODE에서 빌드할 때 '링크할 때는 이런이런 라이브러리를 사용해라' 라고 라이브러리 이름을 어디서 지정해 주어야 하는지요 ?
External Frameworks and libraries 폴더에 추가해 주는 것 밖에는 방법이 없을까요 ?
Project setting을 뒤져봐도 그런 셋팅을 하는 부분을 찾지 못하겠습니다.
.
최신글이 없습니다.
최신글이 없습니다.
댓글목록 3
hongjuny님의 댓글
지금 열심히 문제를 해결중입니다. -_-;
일단, /usr/local/lib 에 있는 라이브러리를 참조하게 하는 방법은
1. Project Info 의 두 번째 탭, Build 에서 Library Search Path 에 /usr/local/lib 을 등록하고
2. Other Linker Flag 에 -l 플래그를 설정합니다. 예를 들어 GNU Scientific library 는 -lgsl 플래그를 설정함으로써 링크를 할 수 있습니다. -lxxx 이름은 인스톨 패키지 내의 configure 파일 내에서 플래그 이름이 정의되어 있습니다.
3. 그렇게 해서 컴파일을 해 보니 예전과 동일한, architecture mismatch 에 걸리고 말았습니다. 그래서 패키지 컴파일 이전에 컴파일러 플래그를 유니버설로, CCFLAGS="-arch i386 -arch ppc", 해 주고 컴파일을 해 보았으나 아직 라이브러리의 유니버설 버젼을 생성하지 못했습니다.
4. 지금까지 Mac OS X 에서 Xcode 를 쓰면서 가장 간편하고 깔끔하게 필요한 헤더와 라이브러리 파일을 제공하는 방법은 Framework 번들을 이용하는 방법이었습니다. 라이브러리 번들은 어디에다 놓아도 됩니다만 라이브러리 폴더 내의 Frameworks 폴더에 모아 두므로 깔끔합니다.
문제를 완전히 해결 본 다음 다시 댓글 올려 보겠습니다. 혹시 wlee 님도 방법을 찾으셨으면 저에게 가르쳐 주십시오. ^^
hongjuny님의 댓글
일단 해결한 것 같습니다. ^^
먼저 패키지를 컴파일하시기 전에 configure 명령을 넣으시면서 유니버설 플래그를 넣습니다.
./configure CFLAGS="-arch i386 -arch ppc"
이렇게 하면 -arch 플래그가 두 개 들어간 make 파일이 생성되어 올바른 유니버설 컴파일이 됩니다. (컴파일 시간이 훨씬 많이 걸리더군요.)
나머지는 위에 댓글에 올린 대로입니다. Xcode 에서 라이브러리에 해당하느 Linker Flag 를 세팅해 주시면 /usr/local/lib 에 있는 라이브러리를 링킹합니다.
먼저 확인하셨겠지만, readme 파일을 확인해 주시고요. GSL 같은 경우는 dylib 가 정상 작동되지 않을 수 있으므로 configure 에서 --disable-shared 플래그를 설정하라고 권고하더군요. ^^
wlee님의 댓글
hongjuny 님이 말씀하신대로 search path에 /usr/local/lib를 넣고 -l 옵션을 Other linker Flag에 설정하여 링크 문제는 해결했습니다. 그런데 한 줄에 다 쓰면 안되고 하나씩 따로 입력을 해주어야 하는 모양이더군요.
-lcv -lcxcore -lhighgui 이런 식으로 한줄로 죽 입력해 줬더니 파일을 못찾았었습니다. 따로 하나씩 입력을 해주니 링크를 하더군요.