我认为这是一个基本问题,但是我找不到关于该主题的足够帖子,或者我只是在搜索时太愚蠢...
我有两个不同解决方案的项目。项目A是使用第三方库(例如ffmpeg(本机C))的应用程序(.exe),项目B是一个DLL,要使用项目A的代码(目的:假定AC#项目通过项目使用项目A的功能B)。
从我的角度来看,我只需要向项目A添加包含路径,以包含它的源文件,并将链接器输入设置为项目B .obj。
但是,在编译项目B时,MSVS无法找到ffmpeg头文件的头文件“ 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比设置包含路径更容易,则可以使用Project来切换A和B的角色,重命名它们并适当地更改其类型,并将DLL中未保留的代码移动到Project B中。一个作为DLL。
编辑(根据您的评论):
项目DLL:
接收将在C ++ exe和C#exe之间共享的所有代码,包括与ffmpeg的链接等。
Project C ++ EXE:
接收以前的Project A的剩余内容。将利用Project DLL(更确切地说是从那里输出的DLL)再次获得以前直接合并的内容。
项目C#EXE:
如您所愿。当然,托管和非托管代码之间的所有编组仍然存在(无论如何,您都必须这样做)。
关于c# - 如何将包含其他第三方C库的C++ project_A链接到另一个project_B,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37202650/