2013-12-12 4 views
0

Im 학습 C++ 및 명령 줄에서 컴파일합니다. 타사 라이브러리를 추가 할 때 문제가 발생합니다. 나는 링커 시스템을 이해할 솔기가 없다. 누구든지 좋은 튜토리얼 또는 그런 것을 알고 있습니까?명령 줄에서 gnu 컴파일러

예를 들어 나는 SDL2 라이브러리를 가지고 놀고 싶고 이런 명령을 사용하고 싶다.

c++ -I/Library/Frameworks/SDL2.framework/Headers -L/Library/Frameworks/SDL2.framework/ -lSDL2 helloworld.cpp 

와 나는 오류 LD를 얻을 : 라이브러리 -lSDL2

+0

가능한 중복 [Linker order - GCC] (http://stackoverflow.com/questions/45135/linker-order-gcc) –

+0

중복되지 않도록주의하십시오. 문제가보고 된 것이 아니므로 그것이 실제로 문제가된다고 가정하면 예제에서 알 수 있습니다. 그렇다면 이것을 지적함으로써 사용자를 도울 수 있으며 질문을 삭제할 수 있습니다. – mydoghasworms

+0

그의 질문은 하나의 라이브러리 만 사용하려고하는 여러 링크 된 라이브러리의 순서와 관련이 있습니다. – citizen2191629

답변

0

나는 답을 발견했다. 다음 명령이 올바르게 컴파일되었습니다. include 문을 ...

#include<SDL2/SDL.h> 
and the correct compile command is... 
c++ -o helloworld helloWorld.cpp -framework SDL2 

g ++로 변경해야했습니다. 내 시스템에서 C++과 g ++는 동일한 gnu 컴파일러에 대한 심볼릭 링크이며 시스템에 설치 한 최신 버전입니다.

-L 옵션은 유닉스 링커 옵션이며 MAC에서 작동하지 않습니다. dev의 GCC에 대한 친절한 - 프레임 워크의 형태로 MAC 특정 링커 옵션을 포함했다. 이들은 도서관을 어디에 저장하고 싶은지, 맥의 전통을 따르고 있습니다. 여러 프레임 워크를 쉼표로 구분하여 연결할 수 있습니다./라이브러리/프레임 워크는 라이브러리에이 기본 검색 위치는 다음 컴파일 할 때 내 소스가

#include<SDL2_mixer/SDL_mixer.h> 

을 가지고 그래서 예를 들어 나는 또한 한 SDL2, SDL2_mixer을 -framework 할 수 있습니다. 서술문은 크로스 플랫폼하게 호환 및 맥 GNU 링커 내가

#include<SDL2/SDL.h> 

을 말하는 경우에 해당 헤더가 /Library/Frameworks/SDL2.framework/Headers

여전히

-ipath 옵션에서 찾을 수 있다는 것을 알고 있습니다 포함 Mac에서 작동하며 유닉스에서 작동하는 것처럼 헤더 및 소스 파일에 대한 대체 검색 위치를 전달하는 데 사용할 수 있습니다.

1

찾을 수 없습니다 당신은 행의 마지막 연결 플래그를 넣어해야합니다

g++ -I/Library/Frameworks/SDL2.framework/Headers helloworld.cpp -L/Library/Frameworks/SDL2.framework/ -lSDL2