【问题标题】:Why can't I link to this DLL in a package folder using CGO?为什么我不能使用 CGO 链接到包文件夹中的这个 DLL?
【发布时间】:2022-01-26 05:52:32
【问题描述】:

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

当我的目录布局为:

  • rs2test
    • go.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
    • go.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,Google 说这意味着应用程序无法正确初始化。

我也试过 -L${SRCDIR}/rs2 但是它说 -lrealsense2 is not found.

【问题讨论】:

    标签: go dll linker linker-errors cgo


    【解决方案1】:

    不仅在构建应用程序时需要 DLL,而且在运行应用程序时也需要(最重要的是)。

    DLL 必须与可执行文件位于同一文件夹、当前工作目录或位于 PATH 中才能被找到。这就是 Windows 的工作方式。更多详情请参考DLL search order

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 2014-04-10
      • 2012-05-07
      • 2017-11-22
      • 2021-05-18
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多