Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用macOS在python中加载动态库时出现问题_Python_Macos_Dynamic Linking_Dylib - Fatal编程技术网

使用macOS在python中加载动态库时出现问题

使用macOS在python中加载动态库时出现问题,python,macos,dynamic-linking,dylib,Python,Macos,Dynamic Linking,Dylib,我知道类似的问题已经被问了很多次,但我找不到一个适合我的解决方案。我是macOS的新手,当然我在macOS中动态链接的工作原理上有些遗漏。我必须在python中导入一个动态库,它反过来应该导入另一个库。 以下是相关文件、环境变量和部分代码: $ echo $DYLD_LIBRARY_PATH /usr/local/lib/:/Developer/NVIDIA/CUDA-10.2/lib $ ls /Developer/NVIDIA/CUDA-10.2/lib/libcurand.* /Dev

我知道类似的问题已经被问了很多次,但我找不到一个适合我的解决方案。我是macOS的新手,当然我在macOS中动态链接的工作原理上有些遗漏。我必须在python中导入一个动态库,它反过来应该导入另一个库。 以下是相关文件、环境变量和部分代码:

$ echo $DYLD_LIBRARY_PATH 
/usr/local/lib/:/Developer/NVIDIA/CUDA-10.2/lib

$ ls /Developer/NVIDIA/CUDA-10.2/lib/libcurand.*
/Developer/NVIDIA/CUDA-10.2/lib/libcurand.10.dylib
/Developer/NVIDIA/CUDA-10.2/lib/libcurand.dylib

$ ls -al /usr/local/lib/libcurand.*
lrwxr-xr-x  1 golosio  admin  50 Feb 24 09:55 /usr/local/lib/libcurand.10.dylib -> /Developer/NVIDIA/CUDA-10.2/lib/libcurand.10.dylib
lrwxr-xr-x  1 golosio  admin  47 Feb 24 09:55 /usr/local/lib/libcurand.dylib -> /Developer/NVIDIA/CUDA-10.2/lib/libcurand.dylib

$ ls -al /usr/local/lib/libneurongpu.*
-rwxr-xr-x  1 root  admin  4496 Feb 24 10:32 /usr/local/lib/libneurongpu.0.dylib
lrwxr-xr-x  1 root  admin    20 Feb 24 10:32 /usr/local/lib/libneurongpu.dylib -> libneurongpu.0.dylib
-rwxr-xr-x  1 root  admin   953 Feb 24 10:32 /usr/local/lib/libneurongpu.la

$ python

>>> import ctypes

>>> lib_path="/usr/local/lib/libneurongpu.dylib"

>>> _neurongpu=ctypes.CDLL(lib_path)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/__init__.py", line 366, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: dlopen(/usr/local/lib/libneurongpu.dylib, 6): Library not loaded: @rpath/libcurand.10.dylib
  Referenced from: /usr/local/lib/libneurongpu.dylib
  Reason: image not found
$echo$DYLD\u库\u路径
/usr/local/lib/:/Developer/NVIDIA/CUDA-10.2/lib
$ls/Developer/NVIDIA/CUDA-10.2/lib/libcurand*
/开发者/NVIDIA/CUDA-10.2/lib/libcurand.10.dylib
/Developer/NVIDIA/CUDA-10.2/lib/libcurand.dylib
$ls-al/usr/local/lib/libcurand*
lrwxr-xr-x 1 golosio admin 50 Feb 24 09:55/usr/local/lib/libcurand.10.dylib->/Developer/NVIDIA/CUDA-10.2/lib/libcurand.10.dylib
lrwxr-xr-x 1 golosio admin 47 Feb 24 09:55/usr/local/lib/libcurand.dylib->/Developer/NVIDIA/CUDA-10.2/lib/libcurand.dylib
$ls-al/usr/local/lib/libgpu*
-rwxr-xr-x 1 root admin 4496 Feb 24 10:32/usr/local/lib/libneurongpu.0.dylib
lrwxr-xr-x 1 root admin 20 Feb 24 10:32/usr/local/lib/libneurongpu.dylib->libneurongpu.0.dylib
-rwxr-xr-x 1 root admin 953 Feb 24 10:32/usr/local/lib/libneurongpu.la
$python
>>>导入ctypes
>>>lib_path=“/usr/local/lib/libneurongpu.dylib”
>>>\u gpu=ctypes.CDLL(lib\u路径)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypes/_init__.py”,第366行,在_init中__
self.\u handle=\u dlopen(self.\u名称,模式)
OSError:dlopen(/usr/local/lib/libneurongpu.dylib,6):未加载库:@rpath/libcurand.10.dylib
引用自:/usr/local/lib/libneurongpu.dylib
原因:找不到图像

我不仅想了解导入库应该做什么,还想了解为什么我所做的工作不起作用。

libneurongpu通过@rpath调用子库libcurand,却无法在任何地方找到它。尝试使用
otool-l/usr/local/lib/libneurongpu.0.dylib
查看@rpath。 然后,您可能希望调整库以从正确的位置调用子库

有两种选择

一,。 删除库路径中的@rpath。
install\u name\u工具-change@rpath/libcurand.10.dylib
libcurand.10.dylib/usr/local/lib/libneurongpu.0.dylib
这将搜索与调用库相同的目录

二,。 将@rpath(或添加另一个)设置到正确的目录。
install\u name\u tool-add\u rpath/usr/local/bin/usr/local/lib/libneurongpu.0.dylib
libneurongpu正在通过@rpath调用一个子库libcurand,但在任何地方都找不到它。尝试使用
otool-l/usr/local/lib/libneurongpu.0.dylib
查看@rpath。 然后,您可能希望调整库以从正确的位置调用子库

有两种选择

一,。 删除库路径中的@rpath。
install\u name\u工具-change@rpath/libcurand.10.dylib
libcurand.10.dylib/usr/local/lib/libneurongpu.0.dylib
这将搜索与调用库相同的目录

二,。 将@rpath(或添加另一个)设置到正确的目录。
安装名称工具-添加路径/usr/local/bin/usr/local/lib/libneurongpu.0.dylib

正确答案是Richard Barber发布的答案。对于任何有类似问题并想了解如何在macOS中导入动态链接库的人,可以在这里找到一篇简单而好的文章:

正确的答案是Richard Barber发布的答案。对于任何有类似问题并想了解如何在macOS中导入动态链接库的人,可以在这里找到一篇简单而好的文章:

谢谢。事实上,我用这种方式解决了我的问题。我在这里找到了一篇很好的文章,帮助我理解了动态库是如何在macOS中导入的:谢谢。事实上,我用这种方式解决了我的问题。我发现了一篇很好的文章,帮助我理解了动态库是如何在macOS中导入的:我很高兴它成功了。在大多数情况下,安装名称都是由自动机处理的,特别是如果它们数量众多的话。我很高兴它能成功。在大多数情况下,install_名称由自动机处理,尤其是在数量众多的情况下。