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);
}