c# - 如何将包含其他第三方 C 库的 C++ project_A 链接到另一个 project_B

标签 c# c++ linker include

我认为这是一个基本问题,但是我找不到关于这个主题的任何足够的帖子,或者我可能太愚蠢了正确搜索...

我在两个不同的解决方案中有两个项目。项目 A 是一个使用第三方库(如 ffmpeg( native C))的应用程序(.exe),而项目 B 是一个 DLL,它想要使用项目 A 的代码(目的:假设 C# 项目通过项目使用项目 A 的功能性B). 从我的角度来看,我只需要添加项目 A 的包含路径以包含它的源文件并将链接器输入设置为项目 B .obj。 但是,在编译 Project B 时,MSVS 找不到一个 ffmpeg Header 的头文件“libavutil/opt.h”:

#pragma once
extern "C"
{
#include <libavutil/opt.h>
#include <libavcodec/avcodec.h>
#include <libavutil/channel_layout.h>
#include <libavutil/common.h>
#include <libavutil/imgutils.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>
}

fatal error C1083: Cannot open include file: 'libavutil/opt.h': No such file or directory.

我真的必须设置那些 ffmpeg 库的包含路径吗? 如果这样做,我会收到许多 LNK2001、2005 和 2019 错误。 有什么想法吗?

最佳答案

抱歉,无法为您的项目设置包含路径。也许,您可以帮助完成这项任务,但是,请查看 here .

您可能会考虑完全重新设计:如果项目 B 使用项目 A 的代码,您可能希望将所有代码移至项目 B,并让项目 A 也使用 DLL。如果您发现将 EXE 项目变成 DLL 比设置包含路径更容易,您可以切换 A 和 B 的角色,重命名它们并适本地更改它们的类型,并移动代码 not 保留在DLL 到项目 B,使用项目 A 作为 DLL。

编辑(回应您的评论):

  • 项目 DLL:
    接收将在 C++ exe 和 C# exe 之间共享的所有代码,包括与 ffmpeg 的链接等。
  • C++ EXE 项目:
    接收之前项目 A 的剩余部分。将利用项目 DLL(更准确地说:从那里输出的 DLL)再次获得之前直接合并的任何内容。
  • C# 项目 EXE: 如你所愿。当然,托管代码和非托管代码之间的所有编码仍然存在(无论如何,您之前都必须这样做)。

关于c# - 如何将包含其他第三方 C 库的 C++ project_A 链接到另一个 project_B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37202650/

相关文章:

c# - ASP.net MVC 4 WebApi - 测试 MIME 多部分内容

c# - 不支持写入压缩流。使用 System.IO.GZipStream

c++ - 无法通过 QModelIndex 从 QTreeView 获取项目

c++ - 用不同的标志打开同一个文件两次?

c++ - 为什么 std::string 对象在使用默认构造函数构造时表现不同?

linux - 如何将 libc.a 链接到 arm-linux 中的共享库中使用 arm-none-linux-gnueabi-gcc

c# - 列表作为 linq 查询结果的属性

c# - 如何从引用程序集中的静态类获取字段及其值

c++ - Binutils ld 链接器如何配置仿真模式(使用 mingw 构建后不支持仿真)

linux - 'gcc -lXext' 成功但 libXext 似乎未链接