2
getcwd( buff, 1024); 

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

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

1 回答 1

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

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

  3. 至于为什么您的程序无法找到 .so,当您打电话时,::dlopen()您应该打电话getcwd()并找出它说的内容。这将帮助您调整相对路径。但是,让我重申,除非您有充分的理由这样做,否则这是一种不好的做法。

于 2013-08-26T15:24:21.543 回答