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

时间:2013-08-26 15:19:10

标签: linux gcc xlib dlopen x11

getcwd( buff, 1024); 

说当前的工作路径;我该怎么办?

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

我正在尝试使用Linux上的以下功能加载我的.so文件 但他们都失败了。描述.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 个答案:

答案 0 :(得分:3)

  1. 考虑使用路径分隔符“/”而不是“//”。我不相信使用“//”会产生任何不良影响,但“/”应该足够了。

  2. 设置LD_LIBRARY_PATH并包含共享库的位置。这是确保dlopen()(或::dlopen())找到您的图书馆的最佳方式。请记住,“相对路径”是相对于当前工作目录的,并且实际上取决于程序启动时的当前工作目录以及任何代码对当前工作目录的任何更改,直到调用::dlopen()时为止。

  3. 至于您致电::dlopen()时,您的计划无法找到.so的原因,您应致电getcwd()并了解其内容。这将帮助您调整相对路径。但是,让我重申,除非你有充分的理由这样做,否则这是一种不好的做法。