2013-08-26 1 views
2
getcwd(buff, 1024); 

указывает текущий текущий рабочий путь; что мне делать?Допустимый относительный путь для dlopen() в Linux?

buff = "/home/online0227/my project/Tutorial/Tutorial 1 Device Seletion\0" 

Я пытаюсь загрузить мой .so файл, используя следующую функцию на Linux но все они терпят неудачу. Каков правильный путь для описания пути к моему файлу .so?

m_hSO = ::dlopen("..//..//..//..//..//so//myso.so", RTLD_LAZY); 
    if(!m_hSO) { 
    m_hSO = ::dlopen("..//..//..//..//..//so/myso.so", RTLD_LAZY); 
    } 
    if(!m_hSO) { 
    m_hSO = ::dlopen("../../../../../so/myso.so", RTLD_LAZY); 
    } 
    if(!m_hSO) { 
    m_hSO = ::dlopen("..//..//so/myso.so", RTLD_LAZY); 
    } 
+1

Всегда используйте -при минимум для debugging- '' dlerror' когда dlopen' терпит неудачу: 'fprintf (STDERR, "dlopen терпит неудачу% S \ N", dlerror());' –

ответ

3
  1. Рассмотрим, используя разделитель пути "/", а не "//". Я не верю, что какие-либо плохие эффекты придут от использования «//», но «/» должно быть достаточно.

  2. Установите LD_LIBRARY_PATH и укажите, где находится ваша общая библиотека. Это лучший способ убедиться, что dlopen() (или ::dlopen()) найдет вашу библиотеку. Помните, что «относительные пути» относятся к текущему рабочему каталогу и действительно зависят от текущего рабочего каталога при запуске программы и любых изменений в текущем рабочем каталоге любым кодом до момента, когда вызывается ::dlopen().

  3. Что касается того, почему ваша программа не находит .so, когда вы звоните ::dlopen(), вы должны позвонить getcwd() и узнать, что он говорит. Это поможет вам отрегулировать относительный путь. Но позвольте мне повторить, что это плохая практика, если у вас нет веских оснований для этого.

+1

Это должно быть комментарий, не ответ –

+0

omg. Я только что реализовал то, что вы сказали, getcwd(), и он говорит: buff = \ "/ home/online0227/project/Tutorial/Tutorial 1 Селекция устройства \\ 000 \\\" \\ 275 \\ 357 \\ 377 \\ 377t: \\ 336 \\ 367 \\ 377 \\ 177 \\ 000 \\ 000 \\ 001 \\ 000 \\ 000 \\ 000 \\ 000 \\ 000 \\ 000 \\ 00367 \\ 377 \\ 177 \\ 000 \\ 000 \\ 360 \\ 347 \\ 377 \\ 177 \\ 000 \\ 000 \\ е \\ 217 \\ 000 \\ 360 \\ 000 \\ а \\ 000 \\ 000 \\ 000 \\ 000 \\ 000 \\ 00 \\ ... –

+0

в этом случае, что мне делать haha ​​ –

Смежные вопросы