gpt4 book ai didi

macos - 使用完整路径链接到 Mac 上的动态库

转载 作者:行者123 更新时间:2023-12-02 05:17:18 24 4
gpt4 key购买 nike

我正在使用以下命令(使用 cmake 生成)链接嵌入 Matlab 引擎的(Python 扩展)库

c++ -mmacosx-version-min=10.6 -bundle -headerpad_max_install_names  -o library.so library.o /Applications/MATLAB_R2009b.app/bin/maci64/libeng.dylib /Applications/MATLAB_R2009b.app/bin/maci64/libmx.dylib -framework Python

结果

$ otool -L library.so
library.so:
@loader_path/libeng.dylib (compatibility version 0.0.0, current version 0.0.0)
@loader_path/libmx.dylib (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/Python.framework/Versions/2.6/Python (compatibility version 2.6.0, current version 2.6.1)
/opt/local/lib/gcc44/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.13.0)
/opt/local/lib/gcc44/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.0)

但是,当我尝试使用该库时,我收到一条错误消息:

ImportError: dlopen(./library.so, 2): Library not loaded: @loader_path/libmex.dylib
Referenced from: ./library.so
Reason: image not found

我认为问题源于这样一个事实:链接器以 @loader_path/libeng.dylib 的形式包含 matlab dylib 文件,而不是使用完整路径,即使我给出了完整路径g++。如何强制链接器使用完整路径?

我知道一种解决方案是使用

export DYLD_LIBRARY_PATH=/Applications/MATLAB_R2009b.app/bin/maci64:$DYLD_LIBRARY_PATH

这是这些库文件所在的位置,但我想避免这种情况,因为它会导致一些其他问题。

最佳答案

使用install_name_tool手动更改文件

install_name_tool -change "@loader_path/libeng.dylib" "/Applications/MATLAB_R2009b.app/bin/maci64/libeng.dylib" library.so 
install_name_tool -change "@loader_path/libmx.dylib" "/Applications/MATLAB_R2009b.app/bin/maci64/libmx.dylib" library.so

我可以使用它作为临时修复,但我想知道是否没有更好的解决方案,为链接器提供使用完整路径的设置。

关于macos - 使用完整路径链接到 Mac 上的动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com