2015-02-04 2 views
1

C++/Linux의 dlopen 기능에 문제가 있습니다.리눅스 dlerror가 dlopen에서 설명 할 수없는 오류 메시지를 반환 함

void * hsiftgpu = dlopen("/full/path/libsiftgpu.so", RTLD_LAZY); 

난에 dlerror 나오는 오류가()/개방 libsiftgpu.so을 찾을 수 없다는 말해 것이라고 생각합니다. 여기에 내가 오류를 검사하는 코드입니다 :

dlopen failed: libcudart.so.6.5: cannot open shared object file: No such file or directory 

내가 슈퍼 리눅스에서 파일 처리에 익숙하지 않은, 그래서 내가 뭔가를 분명 누락 될 수 대신

if(hsiftgpu == NULL){ 
    std::cout << "Could not load libsiftgpu.so" << '\n'; 
    fprintf(stderr, "dlopen failed: %s\n", dlerror()); 
    return 0; 
} 

,이 나에게 말한다 . dlopen을 호출하기 전에 무언가를 재설정해야하는지, 아니면 libsiftgpu.so가 libcudart.so.6.5를 호출하고 있을지 궁금합니다. 어느 쪽이든,이 오류 메시지는 나에게별로 의미가 없습니다.

LD_LIBRARY_PATH에 경로를 추가하려고했습니다 (보안에는 권장하지 않지만 방금 작동하는지보고 싶었습니다). /etc/lib.conf.so/ 또한 두 가지 모두 실행 파일과 .so 라이브러리는 같은 ELF-64 형식으로 컴파일됩니다.

확인해야 할 사항이 부족하여 오류 메시지를 설명 할 수 없습니다. 모든 안내 또는 가능한 설명을 부탁드립니다.

+3

'ldd/full/path/libsiftgpu.so'를 입력하면'libsiftgpu.so'에서 가져온 모든 라이브러리 목록을 찾아야합니다. 절대 경로가없는 것들은 LD_LIBRARY_PATH에 위치하고 추가되어야합니다. 그보다 더 많은 내용이있을 것입니다.하지만 슬프게도 저는 리눅스 라이브러리에서 많은 작업을하지 않았습니다. – inetknght

+1

나는 ldd를 실행했고 libcudart.so.6.5는 절대 경로와 함께 나타난다. 그러나이 파일은 libcudart.so.6.5.14를 가리키는 심볼릭 링크입니다 (동일한 디렉토리에 있습니다.) 실행 파일이 링크가 아닌 실제 파일을 가리켜 야하는 경우 어떻게 조정해야할지 모르겠습니다. 그것. –

+1

OS X에 대해서는'install_name_tool'을 참조하십시오. 리눅스에서는 http://nixos.org/patchelf.html을보십시오. – inetknght

답변

1

이것은 64 비트 라이브러리를 가리켜 야 할 때 32 비트 라이브러리를 가리키는 실행 파일의 경우와 같이 나타났습니다. 나는 논평 한 모든 사람들에게 점수를 주었다.

관련 문제