相关疑难解决方法(0)

C++强制卸载共享库

我正在尝试创建一个多次重新加载共享库的应用程序.但在某个时间点,dlmopen失败并出现错误

/usr/lib/libc.so.6: cannot allocate memory in static TLS block

以下是重现此问题的最小代码:

#include <dlfcn.h>
#include <cstdio>
#include <vector>

int main() {
  for (int i = 0; i < 100; ++i) {
    void *lib_so = dlmopen(LM_ID_NEWLM, "lib.so", RTLD_LAZY | RTLD_LOCAL);
    if (lib_so == NULL) {
      printf("Iteration %i loading failed: %s\n", i, dlerror());
      return 1;
    }
    dlclose(lib_so);
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

并清空lib.cpp,用.编译

g++ -rdynamic -ldl -Wl,-R . -o test main.cpp
g++ -fPIC -shared lib.cpp -o lib.so
Run Code Online (Sandbox Code Playgroud)

更新

它似乎即使用一个线程也会崩溃.问题是:如何强制库卸载或销毁使用的未使用的命名空间LM_ID_NEWLM

c++ linux shared-libraries

8
推荐指数
1
解决办法
1333
查看次数

ImportError:dlopen:无法使用静态TLS加载任何其他对象

ImportError如果在tensorflow导出器之后导入OpenCV(cv2),我会得到一个.

ubuntu@ip-172-31-2-144:~/Downloads/opencv-2.4.13/release$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from tensorflow.contrib.session_bundle import exporter
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so locally
>>> import cv2
Traceback (most recent call last):
  File …
Run Code Online (Sandbox Code Playgroud)

opencv tensorflow

6
推荐指数
1
解决办法
3711
查看次数

dlopen:无法使用静态TLS加载任何更多对象

我有一个大型的混合java/c ++应用程序,它将多个共享库加载到java中.它在我的Ubuntu 12.04 32位机器上工作正常,但我在使用Fedora 17 64位机器时遇到问题.一切都很好,但是当我尝试运行它时,我得到:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /pathto/libmylib.so: dlopen: cannot load any more object with static TLS
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏!

更新:我已经将其缩小到与PCL(点云库)依赖关系的问题.libmylib.so依赖于PCL,但如果没有安装,也可以在没有PCL的情况下编译.没有PCL编译工作正常.我正在等待PCL社区的人们回复我,我会根据他们的建议更新这个帖子.

java unix fedora dlopen thread-local-storage

5
推荐指数
1
解决办法
2644
查看次数