2014-05-10 7 views
3

SFML C++ 게임을 작성하고 스레드를 사용하려고했지만 잠시 후 모든 것이 충돌합니다. 검색 후 XInitThreads()를 호출하는 것으로 보입니다. 하지만 어떻게 든 작동하지 않습니다.XInitThreads를 호출 할 수 없습니다.

단순화 된 코드 :. 내가 컴파일 할 때 내가 오류 메시지는 헤더 파일이 작동하는지 수 없습니다 " 'XInitThreads'기호로 정의되지 않은 참조

#include <X11/Xlib.h> 

    int main() {   
    XInitThreads(); 
    //other stuff 
    return 1337; 
    } 

입니다

되지만 파일이이 없다 방법은 구현 프로젝트에 -lX11 설정 링크 X11 라이브러리를 추가해야

+0

가장 가능성이 당신을 didnt 링크 제대로 –

+0

오류 메시지가 i가 포함 제거 할 때 변경되므로 경로, 확실히 올바른 포함 선. 그러나 Xlib 라이브러리가 나에 의해 생성되지는 않았고 많은 사람들이 사용했기 때문에 소스 파일이 헤더 파일에 제대로 연결되어 있지 않으면 놀랄 것입니다. Xlib을 실제로 다시 설치하여 손상되지 않았는지 확인했습니다. 그래서 나는 혼란 스럽다. – user3554800

답변

3

"기호에 대한 정의되지 않은 참조"는 컴파일러 오류가 아니라 링커 오류입니다. 이 메시지가 나타나면 컴파일러에서 이미 파일을 오브젝트 파일로 컴파일했지만 오브젝트 파일을 실행 파일에 링크하는 함수가 포함 된 공유 라이브러리를 찾을 수 없습니다. 컴파일러 인수 문제에 -lX11의 순서는, 오류의 경우를 얻을 것이라고

$ gcc prog.c -lX11 

참고 : GCC를 사용하는 경우

, 일반적으로 당신이 어떤 -l 플래그를 추가과 같이해야 의미 이 수행

$ gcc -lX11 prog.c 
/tmp/ccBCxiFT.o: In function `main': 
:(.text+0x5): undefined reference to `XInitThreads' 
collect2: error: ld returned 1 exit status 
+0

당신과 켄이 옳은 것 같습니다. gcc를 사용하고 있기 때문에 전에 "-l 플래그"를 어디에 넣어야하는지 잘 모릅니다. 어쨌든 당신의 도움에 감사드립니다. – user3554800

0

당신이 사용하는 경우 이클립스 projectproperties로 이동 -.> C/C++으로 Build-> 설정 -> 도구 설정 -> GCC 링커 -> 도서관 'X11'을 추가하십시오.

+0

Code :: Blocks에 해당 위치를 찾은 다음 "링크 라이브러리 :"목록에 "X11"을 넣은 것 같습니다. 이제는 XInitThreads가 항상 1을 반환합니다. 그러나 새 표준을 만들기 시작해야 할 때처럼 :: 스레드는 스레드가 생성 된 후에 즉시 중단됩니다. 이유는 없습니다. 어쨌든 고마워. – user3554800

0

이 header- 추가

#include<X11/Xlib.h>

는 소스 코드가 일 아민 컴파일 LTS

우분투 16.04에서 테스트

gcc <filename.extension> -lX11

+0

이것은 다른 답변과 동일하며 헤더가 이미 포함되어 있습니다! –