【发布时间】:2020-12-16 21:43:59
【问题描述】:
我正在尝试为本地库 (Srt) 创建托管(.net 核心)C++/CLI 包装器,但是在本地库中引用方法时,我遇到了 2 个构建错误。我从本机库中引用了标头 srt.h,尝试调用一个名为 srt_cleanup 的方法,但在构建时得到它:
error LNK2028: unresolved token (0A00000B) "extern "C" int __cdecl srt_cleanup(void)" (?srt_cleanup@@$$J0YAHXZ) referenced in function "public: void __clrcall HeliosMediaStreamCliSrt::SrtReceiver::Stop(void)" (?Stop@SrtReceiver@HeliosMediaStreamCliSrt@@$$FQE$AAMXXZ)
error LNK2019: unresolved external symbol "extern "C" int __cdecl srt_cleanup(void)" (?srt_cleanup@@$$J0YAHXZ) referenced in function "public: void __clrcall HeliosMediaStreamCliSrt::SrtReceiver::Stop(void)" (?Stop@SrtReceiver@HeliosMediaStreamCliSrt@@$$FQE$AAMXXZ)
示例:
// pch.h
#ifndef PCH_H
#define PCH_H
#include <srt.h>
#include <stdio.h>
#include <tchar.h>
#include <memory>
#include <map>
#include <stdlib.h>
#endif //PCH_H
// SrtReceiver.h
#pragma once
using namespace System;
namespace TestSrt {
public ref class SrtReceiver {
public:
void SrtReceiver::Stop();
private:
};
}
// SrtReceiver.cpp
#include "pch.h"
#include "SrtReceiver.h"
namespace TestSrt {
void SrtReceiver::Stop() {
srt_cleanup();
}
}
项目配置:
General -> Configuration Type: Dynamic Library (.dll)
Advanced -> Common Language Runtime Support: .NET Core Runtime Support (/clr:netcore)
Advanced -> .NET Core Target Framework: .NET 5.0
C/C++ -> General -> Common Language Runtime Support: NetCore
我对 C++ 很生疏,所以我不熟悉构建系统,它会导致令人困惑的错误。我以前从未尝试过在 C++ 中使用 .net 核心做任何事情,因为 C# 比我的速度更快。这看起来与构建属性有关,编译器正在寻找错误的内部方法名称。我该如何解决这个问题?
【问题讨论】: