【发布时间】:2016-10-29 02:24:47
【问题描述】:
我一直在尝试用 g++ 在 windows 上编译这个项目: https://github.com/newhouseb/openvr-c
我的命令行:
g++ -c -std=gnu++0x -DBUILDING_OPENVR_C openvr_c.cpp openvr_c.h
g++ -shared -o openvr_c.dll openvr_c.o -std=gnu++0x -Wl,--out-implib,openvr_api.dll -L. -lopenvr_api
当我运行第二行时,我得到了这些错误:
openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext10CheckClearEv[__ZN2vr14COpenVRContext10CheckClearEv]+0x12): 对
_imp__VR_GetInitToken' openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext10CheckClearEv[__ZN2vr14COpenVRContext10CheckClearEv]+0x33): undefined reference to_imp__VR_GetInitToken' 的未定义引用 openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext8VRSystemEv[__ZN2vr14COpenVRContext8VRSystemEv]+0x2b): 对_imp__VR_GetGenericInterface' openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext11VRChaperoneEv[__ZN2vr14COpenVRContext11VRChaperoneEv]+0x2c): undefined reference to_imp__VR_GetGenericInterface' 的未定义引用 openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext16VRChaperoneSetupEv[__ZN2vr14COpenVRContext16VRChaperoneSetupEv]+0x2c): 未定义对_imp__VR_GetGenericInterface' openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext12VRCompositorEv[__ZN2vr14COpenVRContext12VRCompositorEv]+0x2c): undefined reference to_imp__VR_GetGenericInterface' 的引用 openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext9VROverlayEv[__ZN2vr14COpenVRContext9VROverlayEv]+0x2c): 未定义对_imp__VR_GetGenericInterface' openvr_c.o:openvr_c.cpp:(.text$_ZN2vr14COpenVRContext14VRRenderModelsEv[__ZN2vr14COpenVRContext14VRRenderModelsEv]+0x2c): more undefined references to_imp__VR_GetGenericInterface' 的引用 openvr_c.o:openvr_c.cpp:(.text$_ZN2vr7VR_InitEPNS_12EVRInitErrorENS_18EVRApplicationTypeE[__ZN2vr7VR_InitEPNS_12EVRInitErrorENS_18EVRApplicationTypeE]+0x23): 未定义对_imp__VR_InitInternal' openvr_c.o:openvr_c.cpp:(.text$_ZN2vr7VR_InitEPNS_12EVRInitErrorENS_18EVRApplicationTypeE[__ZN2vr7VR_InitEPNS_12EVRInitErrorENS_18EVRApplicationTypeE]+0x4c): undefined reference to_imp__VR_IsInterfaceVersionValid' 的引用 openvr_c.o:openvr_c.cpp:(.text$_ZN2vr7VR_InitEPNS_12EVRInitErrorENS_18EVRApplicationTypeE[__ZN2vr7VR_InitEPNS_12EVRInitErrorENS_18EVRApplicationTypeE]+0x61): 对_imp__VR_ShutdownInternal' openvr_c.o:openvr_c.cpp:(.text$_ZN2vr11VR_ShutdownEv[__ZN2vr11VR_ShutdownEv]+0x7): undefined reference to_imp__VR_ShutdownInternal' collect2.exe 的未定义引用: 错误:ld 返回 1 个退出状态
我不明白这些错误是什么,
有人可以启发我吗?
【问题讨论】:
-
这个项目是一组与 OpenVR 的 C 绑定。您需要将其与使用 gcc 构建的 OpenVR 版本相关联。
-
OpenVR 是封闭源代码,我认为它是用 Visual Studio 构建的。如果我想编译绑定,我将不得不使用相同的编译器?
-
是的,您必须使用相同的编译器。 g++ 和 VS 有非常不同的 ABI。名称修饰不同,对象布局不同,标准库实现完全不同......
-
奇怪,绑定的人好像在用clang
-
他们说 Windows 上的 clang 可以与 MSVC 兼容,但我不熟悉这种操作模式。尝试使用 clang-cl 作为编译器(使用 cl 样式的命令行选项)。
标签: c++ c g++ linker-errors undefined-reference