Linux上dlopen()的有效相对路径?

Linux上dlopen()的有效相对路径?,linux,gcc,xlib,dlopen,x11,Linux,Gcc,Xlib,Dlopen,X11,表示当前遵循的工作路径;我该怎么办 getcwd( buff, 1024); 我正在尝试在Linux上使用以下函数加载我的.so文件 但他们都失败了。描述我的文件路径的正确路径是什么 buff = "/home/online0227/my project/Tutorial/Tutorial 1 Device Seletion\0" 考虑使用路径分隔符“/”而不是“/”。我不相信使用“/”会产生任何不良影响,但“/”应该足够了 设置LD_LIBRARY_路径,并使其包含共享库的位置。这是确

表示当前遵循的工作路径;我该怎么办

getcwd( buff, 1024); 

我正在尝试在Linux上使用以下函数加载我的
.so
文件 但他们都失败了。描述我的
文件路径的正确路径是什么

buff = "/home/online0227/my project/Tutorial/Tutorial 1 Device Seletion\0"
  • 考虑使用路径分隔符“/”而不是“/”。我不相信使用“/”会产生任何不良影响,但“/”应该足够了

  • 设置LD_LIBRARY_路径,并使其包含共享库的位置。这是确保
    dlopen()
    (或
    ::dlopen()
    )找到库的最佳方法。请记住,“相对路径”是相对于当前工作目录的,这实际上取决于程序启动时的当前工作目录,以及调用
    ::dlopen()
    之前任何代码对当前工作目录的任何更改

  • 至于为什么您的程序找不到。因此,当您调用
    ::dlopen()
    时,您应该调用
    getcwd()
    ,并找出它说了什么。这将帮助您调整相对路径。但是,让我重申,这是一种不好的做法,除非你有很好的理由这样做


  • 这应该是评论,而不是回答。我刚刚实现了您所说的getcwd(),它说:buff=\“/home/online0227/project/Tutorial/Tutorial 1 Device Seletion\\000\\”\\275\\357\\377\\377t:\\336\\367\\377\\177\\000\\000\\001\\000\\000\\000\\000\\000\\000\\00367\\377\\177\\000\\360\\347\\377\\177\\000\\f\\217\\000\\360\\000\\a\\000\\000\\000\\000\\001\\000\\000\\000\\000\\000\\000\\000\\000\\000\\在这种情况下,我应该怎么做hahaThanks,我已经尝试改写了答案,希望这有帮助。路径停在
    \000
    (或您编写的
    \\000
    )。之后,调试器就开始疯狂了。当
    dlopen
    失败时,请始终使用
    dlerror
    fprintf(stderr,“dlopen失败%s\n”,dlerror());
       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);
       }