自从几天以来,我一直在使用MATLAB在dlopen某个时刻发生同样的错误。 我对MATLAB很新,这就是为什么我不知道该怎么做。 谷歌似乎也没有帮助我。 当我尝试创build一个特征向量时,我得到这个: Error using eig LAPACK loading error: dlopen: cannot load any more object with static TLS 我也做这个乘法: Error using * BLAS loading error: dlopen: cannot load any more object with static TLS 我当然想find解决这个问题的办法,但我不太了解,不知道该怎么办。 这些是我find的线程: 我如何使用MATLAB提供的BLAS库? http://www.mathworks.de/de/help/matlab/matlab_external/calling-lapack-and-blas-functions-from-mex-files.html 有人能帮助我吗? 函数调用的例子演示了这个错误 >> randn(3,3) ans = 2.7694 0.7254 -0.2050 -1.3499 -0.0631 -0.1241 3.0349 0.7147 1.4897 >> […]
我有一个可执行文件和一个dynamic库(.so)。 库导出一些符号和可执行调用成功。 但是我想让库调用可执行文件的function。 我试图做可执行文件中的以下内容: //test extern "C" void print(const char * str) { std::cout << str << std::endl; } 这在库中: extern "C" void print(const char *); 但是当我在可执行文件(加载库)中调用dlopen ,它返回错误undefined symbol: print 。 我如何解决它?
我正在寻找一种方法来直接从内存中加载生成的对象代码。 我明白,如果我把它写到一个文件中,我可以调用dlopendynamic加载它的符号并链接它们。 然而,这看起来有点迂回,考虑到它在内存中启动,写入磁盘,然后通过dlopen重新加载到内存中。 我想知道是否有一些方法来dynamic链接目标代码存在于内存中。 从我可以告诉的可能有几种不同的方式来做到这一点: 把它想成你的内存位置是一个文件,尽pipe它永远不会留下内存。 find一些其他的系统调用,我正在寻找(我不认为这存在)。 find一些可以直接在内存中链接代码的dynamic链接库。 很明显,这对于google来说有点难,因为“dynamic链接库”提供了关于如何dynamic链接库的信息,而不是dynamic链接任务的库。 从链接器中抽取一些API,并从其代码库中创build一个新的库。 (显然这对我来说是最不可取的select)。 那么哪些是可能的? 可行? 你能指出我所假设的任何东西吗? 还有没有想过的另一种方式?
所以大家可能知道glibc的/lib/libc.so.6可以在shell中像正常的可执行文件那样执行,在这种情况下,它会打印版本信息并退出。 这是通过在.so中定义一个入口点来完成的。 对于某些情况,也可以将其用于其他项目。 不幸的是,你可以通过ld的-e选项设置的低级入口点有点太低级:dynamic加载器不可用,所以你不能调用任何适当的库函数。 glibc出于这个原因在这个入口点通过裸机系统调用来实现write()系统调用。 我现在的问题是,任何人都可以想出一个很好的方法,如何从这个入口引导一个完整的dynamic链接器,以便可以访问其他.so的函数?