如何为Julia的Libdl.find_library()指定自定义动态库搜索路径
错误原因排查
- 第一次调用报错:
find_library()的第二个参数要求接收字符串数组类型的路径列表,你传入了单个字符串,触发了内部路径拼接的类型匹配错误。 - 第二次修改
DL_LOAD_PATH失败:首先DL_LOAD_PATH本身是字符串数组类型,不能直接赋值为单个字符串;其次你使用的相对路径没有锚定项目位置,Julia运行时的工作目录不一定是项目根目录,相对路径会出现定位错误。
可行解决方案
结合你的项目目录结构,使用@__DIR__宏锚定当前代码文件的绝对路径,可以实现完全便携的库加载逻辑,代码写在MyPackage.jl中即可:
# 先计算library目录的绝对路径:@__DIR__是当前MyPackage.jl所在的src目录的绝对路径 # dirname(@__DIR__)就是src的上级目录,也就是项目根目录,再拼接library即可 lib_search_path = joinpath(dirname(@__DIR__), "library") # 传入路径数组作为第二个参数 const _LIB = find_library("foo", [lib_search_path])
小提示:不用显式加
.dll后缀,find_library()会自动根据当前操作系统补全对应后缀,方便后续跨平台适配。
如果偏好使用DL_LOAD_PATH的方式,正确写法如下:
using Libdl lib_search_path = joinpath(dirname(@__DIR__), "library") # 往DL_LOAD_PATH数组中追加搜索路径,不要直接赋值 push!(DL_LOAD_PATH, lib_search_path) const _LIB = find_library("foo")
内容的提问来源于stack exchange,提问作者Julie96
相关产品推荐
相关产品推荐

