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 형식으로 컴파일됩니다.
확인해야 할 사항이 부족하여 오류 메시지를 설명 할 수 없습니다. 모든 안내 또는 가능한 설명을 부탁드립니다.
'ldd/full/path/libsiftgpu.so'를 입력하면'libsiftgpu.so'에서 가져온 모든 라이브러리 목록을 찾아야합니다. 절대 경로가없는 것들은 LD_LIBRARY_PATH에 위치하고 추가되어야합니다. 그보다 더 많은 내용이있을 것입니다.하지만 슬프게도 저는 리눅스 라이브러리에서 많은 작업을하지 않았습니다. – inetknght
나는 ldd를 실행했고 libcudart.so.6.5는 절대 경로와 함께 나타난다. 그러나이 파일은 libcudart.so.6.5.14를 가리키는 심볼릭 링크입니다 (동일한 디렉토리에 있습니다.) 실행 파일이 링크가 아닌 실제 파일을 가리켜 야하는 경우 어떻게 조정해야할지 모르겠습니다. 그것. –
OS X에 대해서는'install_name_tool'을 참조하십시오. 리눅스에서는 http://nixos.org/patchelf.html을보십시오. – inetknght