2014-01-16 1 views
1

며칠 전에 윈도우에서 전환했고 xcode에서 링크 과정을 혼란스럽게합니다. 파일이 "libnagc_nag.a"인 nag C 라이브러리라는 정적 라이브러리를 사용하고 싶습니다. "/opt/NAG/clmi623dgl/lib/libnagc_nag.a"를 "다른 링커 플래그"에 추가하면 프로그램이 완벽하게 실행됩니다. 반면에, "Build Phases -> 라이브러리와 바이너리를 링크 -> + ->"other를 추가하고 "libnagc_nag.a"를 추가하면 라이브러리 파일이 프로젝트 탐색기에 나타나지만 다음과 같은 오류가 발생합니다 빌드가 성공하고 실행을 시도한 후에xcode : 링커 플래그와 "라이브러리와 바이너리 링크"를 추가하는 것의 차이점

dyld: Library not loaded: 
/fserver/mo/cl23/CL23.3/CLMI623DG_build/BUILD_mac_64/climp/LIBS/nag_lm/libnagc_nag.dylib 
Referenced from: /Users/german/Library/Developer/Xcode/DerivedData/myproj-bjepqyzlzkayspddtaspmmzxgaid/Build/Products/Debug/myproj 
Reason: image not found 

내 질문은 : 왜 어떤 다른

입니까? 동적 라이브러리라고 생각합니까? 두 번째 경우에이 문제를 어떻게 해결할 수 있습니까?

답변

2

나는 대답을 this link에 발견했다. 문제는 링커 플래그가 동적 라이브러리와 정적 라이브러리 모두에서 동일하며 파일 확장자가 제거 되었기 때문입니다. 따라서 동일한 이름과 다른 확장자 만 가진 정적 및 동적 라이브러리가있는 경우 링커는 기본적으로 라이브러리의 동적 버전을 선택합니다. 이것은 "라이브러리와 바이너리 링크"메뉴에서 정적 버전을 선택한 경우에도 발생합니다. 그런 다음 앱에서 동적 라이브러리를 찾을 수없는 경우 오류가 발생합니다. 따라서 질문에 대한 대답은 다음과 같습니다.

1) 동일한 이름의 동적 라이브러리가 없으면 아무런 차이가 없습니다. 2) 링커는 라이브러리 이름 만 알고 있으므로 기본적으로 동적 버전을 선택합니다. 3) 솔루션은 라이브러리의 이름을 바꾸거나 첫 번째 방법을 사용할 수 있습니다.

0

프로젝트에 여러 빌드 대상이 있습니까? 그렇다면 해당 대상에 라이브러리를 추가 했습니까? "라이브러리와 함께 바이너리 링크"를 다시 보거나 프로젝트 네비게이터의 프레임 워크를 선택하고 파일 속성 패널에서 "대상 멤버쉽"을 보면됩니다.

또한 프레임 워크 검색 경로가 올바르게 설정되어 있습니까? 프로젝트 탐색기의 상단에있는 프로젝트를 클릭하고 화면의 상단 중앙에있는 "Build Settings"를 클릭 한 다음 "Search Paths"로 이동하여 적절한 경로가 포함되어 있는지 확인하십시오.

+0

아니요, 대상은 하나뿐입니다. NAG에서 제공하는 예제에서 텍스트의 main 텍스트를 변경 한 것은 기본 C++ 프로젝트입니다. 라이브러리가 올바르게 추가되었거나 적어도 "대상 멤버십"에 표시된 라이브러리입니다. 또한 프레임 워크 검색 경로와 lib 경로는 모두 "libnagc_nag.a"파일의 경로입니다. – German

관련 문제