2017-10-16 8 views
1

SFML 2.41 이상이 필요한 프로그램을 컴파일하려고합니다. Ubuntu 16.04의 repos에는 새로운 버전이 없으므로 this page에 (다소 희박한) 지침을 따라 SFML 2.4.2를 설치했습니다. 특히 this page에서 리눅스 버전을 dowloaded하고 lib, shareinclude 폴더를 찾을 때까지 파고 /usr/local/에 같은 이름의 폴더에 복사했습니다. 내가 sudo ls -l /usr/local/lib | grep libsfml-system.so I을 실행하면심볼릭 링크가 있지만 ld가 라이브러리를로드 할 수 없습니다.

attempt to open //usr/local/lib/x86_64-linux-gnu/libsfml-system.so failed 
attempt to open //usr/local/lib/x86_64-linux-gnu/libsfml-system.a failed 
attempt to open //usr/local/lib/libsfml-system.so failed 
attempt to open //usr/local/lib/libsfml-system.a failed 

:

/usr/bin/ld: cannot find -lsfml-system 
/usr/bin/ld: cannot find -lsfml-window 
/usr/bin/ld: cannot find -lsfml-graphics 

내가 ld -lsfml-system --verbose | grep /usr/local/lib을 실행하면 나는 다음과 같은 얻을, 순간 sfml-system에 초점 :

나는 다음과 같은 오류를 얻을 포함 된 Makefile을 실행하는 경우 다음을 얻으십시오 :

lrwxrwxrwx 1 root root  21 Oct 16 01:38 libsfml-system.so -> libsfml-system.so.2.4 
lrwxrwxrwx 1 root root  23 Oct 16 01:38 libsfml-system.so.2.4 -> libsfml-system.so.2.4.2 
-rw-r--r-- 1 root root  72080 Feb 10 2017 libsfml-system.so.2.4.2 

그래서 ld 경로에있는 .so 파일에 대한 심볼릭 링크가있는 것 같습니다. 왜 라이브러리를로드 할 수 없습니까?

는 (I 이중 슬래시에 대해 처음에 걱정했지만, this question 그 괜찮 제안합니다.)


내가 지금 sudo ldconfig를 실행 시도했습니다 지금까지

를 시도했다 sudo ldconfig /usr/local/lib/. 내가 sudo ldconfig --verbose 2> /dev/null | grep sfml을 실행할 때 그 둘 다 예를 들어, 난 그냥 단지 정보로 표시 메시지를 얻을 stderr에 (

libsfml-window.so.2.4 -> libsfml-window.so.2.4.2 
    libsfml-graphics.so.2.4 -> libsfml-graphics.so.2.4.2 
    libsfml-audio-d.so.2.4 -> libsfml-audio-d.so.2.4.2 
    libsfml-graphics-d.so.2.4 -> libsfml-graphics-d.so.2.4.2 
    libsfml-audio.so.2.4 -> libsfml-audio.so.2.4.2 
    libsfml-window-d.so.2.4 -> libsfml-window-d.so.2.4.2 
    libsfml-system.so.2.4 -> libsfml-system.so.2.4.2 
    libsfml-system-d.so.2.4 -> libsfml-system-d.so.2.4.2 
    libsfml-network-d.so.2.4 -> libsfml-network-d.so.2.4.2 
    libsfml-network.so.2.4 -> libsfml-network.so.2.4.2 
    libsfml-network.so.2.3 -> libsfml-network.so.2.3.2 
    libsfml-graphics.so.2.3 -> libsfml-graphics.so.2.3.2 
    libsfml-system.so.2.3 -> libsfml-system.so.2.3.2 
    libsfml-window.so.2.3 -> libsfml-window.so.2.3.2 

을 얻을 특별한 방법 ld -lsfml-system

의 동작을 변경 :

/sbin/ldconfig.real: Path `/usr/local/lib' given more than once 

/sbin/ldconfig.real: /lib/i386-linux-gnu/ld-2.23.so is the dynamic linker, ignoring 

그래서 나는 그들이 중요하지 않았다 생각.) /etc/ld.so.cache 이후


이 언급 한, 내가 cp /etc/ld.so.cache /etc/ld.so.cache.bak와의 복사본을 만들어 sudo ldconfig을 다시 달렸다. 새 캐시 파일이 생성되었지만 전혀 다르지 않습니다. 즉 diff /etc/ld.so.cache /etc/ld.so.cache.bak은 아무 것도 인쇄하지 않습니다.

+0

링크 할 때'-L/usr/local/lib' 옵션을 추가 했습니까? 대부분의 리눅스 시스템은 표준 라이브러리 검색 경로에'/ usr/local/lib'을 가지고 있지 않습니다. –

+0

출력의 두 번째 블록에는'usr/local/lib/libsfml-system.so를 열려고 시도했습니다. '라는 메시지가 포함되어있어 내 시스템이 그곳에서 검색하는 것처럼 보입니다. – Ryan1729

+0

@Someprogrammerdude 다른 어떤 것도 작동하지 않았기 때문에'ld -L/usr/local/lib -lsfml-system --verbose'를 실행하려고했지만 위와 같은 결과를 얻었습니다. – Ryan1729

답변

0

표준 Linux 라이브러리는 /etc/ld.so.cache에 캐시됩니다. 표준 경로에 라이브러리를 추가하는 경우 ldconfig (루트로)을 실행해야합니다.

+0

나는 그것을 지금 시도했다. 아무것도하지 않는 것 같았습니다. 질문에 대한 결과물을 추가했습니다. – Ryan1729

2

/usr/local/lib/에 대한 사용 권한이 파일을 복사 할 때 변경되었다는 것이 문제가되었습니다. 특히 실행 비트가 설정되지 않은 것 같습니다. 다시 설정 한 후에는 라이브러리를 올바르게 연결할 수 있습니다.