MacOS中dyld: Library not loaded的错误修正

今天在用mac编译udt代码时,

make完之后会产生一个动态库libudt.dylib。

在 Mac 系统中,默认搜索库的路径是 /usr/lib ,并不像 Windows 一样 dll 放在和 exe 同级目录下也会被搜索到。

因此会产生dyld: Library not loaded的问题。


每一个 dylib 库自身有一个 id 值会告诉可执行文件自己的位置,例如下面是libudt.dylib 库,我们可以使用如下命令查看其信息:


otool -L libudt.dylib
返回结果:

libudt.dylib:

	libudt.dylib (compatibility version 0.0.0, current version 0.0.0)

	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.5.0)

	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)



这无法试在另一个文件夹下的可执行程序发现。

进而报错:dyld: Library not loaded

查过一番资料后,找到两种解决办法:

1、将目录直接加入搜索路径

export DYLD_LIBRARY_PATH=&DYLD_LIBRARY_PATH:/Users/***/Desktop/udt-git/udt4/src

亲测可行。


2、使用 install_name_tool 工具修改库的 id 标识

由于这种方法可以使用相对路径,在其他mac机上方便移植,其实是更好的选择。

我没有亲自实践,不误导大家了。



你可能感兴趣的:(杂项)