为什么我不能使用 CGO 链接到包文件夹中的这个 DLL?

我正在尝试使用 CGO 来使用 realsense2.dll(英特尔的 RealSense 相机库)。我在 Windows 11 x64 上。

当我的目录布局为:

  • rs2test

    • 去.mod

    • realsense2.dll

    • context.go(C 代码的包装器)

    • devicelist.go(C 代码的包装器)

    • error.go(C 代码的包装器)

    • main.go

在 C 代码文件的每个包装器中,我有以下指令:

/*

#cgo CFLAGS: -I../../../include/librealsense2

#cgo LDFLAGS: -L${SRCDIR} -lrealsense2

#include "../../../include/librealsense2/rs.h"

#include "../../../include/librealsense2/h/rs_context.h"

#include "../../../include/librealsense2/h/rs_pipeline.h"

#include "../../../include/librealsense2/h/rs_option.h"

#include "../../../include/librealsense2/h/rs_frame.h"

*/

但是,当我尝试将包装文件放入自己的包中时,如下所示:

  • rs2test

    • rs2/context.go

    • rs2/devicelist.go

    • rs2/error.go

    • rs2/realsense2.dll

    • 去.mod

    • main.go

并将指令更改为:

#cgo CFLAGS: -I../../../../include/librealsense2

#cgo LDFLAGS: -L${SRCDIR} -lrealsense2

#include "../../../../include/librealsense2/rs.h"

#include "../../../../include/librealsense2/h/rs_context.h"

#include "../../../../include/librealsense2/h/rs_pipeline.h"

#include "../../../../include/librealsense2/h/rs_option.h"

#include "../../../../include/librealsense2/h/rs_frame.h"

我得到退出状态 0xc0000135 谷歌说这意味着应用程序未能正确初始化。


我也试过 -L${SRCDIR}/rs2 但它说 -lrealsense2 没有找到。


鸿蒙传说
浏览 163回答 1
1回答

梦里花落0921

不仅在构建应用程序时需要 DLL,而且在运行应用程序时(也是最重要的)也需要 DLL。DLL 必须与可执行文件位于同一文件夹、当前工作目录或在 PATH 中才能被找到。这就是 Windows 的工作方式。有关详细信息,请参阅DLL 搜索顺序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go