如何在 Visual Studio 中将用 C 编写的源代码从另一个项目包含到我自己的 C++ 项目中

Posted

技术标签:

【中文标题】如何在 Visual Studio 中将用 C 编写的源代码从另一个项目包含到我自己的 C++ 项目中【英文标题】:How can I include source code written in C from another project into my own project in C++ in Visual Studio 【发布时间】:2018-03-09 08:51:49 【问题描述】:

我想在 Visual Studio 中的 Windows 上将 Potrace 用于 C++ 项目,但我不知道如何将 Potrace 包含到我的项目中。 我尝试使用 Cygwin 编译 C 文件,然后创建一个 .a 文件,然后在 Visual Studio 中链接到它,但这不起作用。 Visual Studio 能够识别 Potrace 中的函数,但是当使用 Potrace 运行测试程序时(调用 potrace_version() ),Visual Studio 得到错误“LNK2019 unresolved external symbol _potrace_version referenced in function_main”

我已经通过使用上面提到的技术让它在 Ubuntu 上工作,然后编译我的代码: g++ main.cpp backenddxf.cpp ImageManipulation.cpp ./libubuntu/libpotrace.a -o test.out 'pkg-config --cflags --libs opencv

我是否必须将源代码(在网站上称为“源代码分发”)编译为 lib 文件,然后将其链接到我的项目,在这种情况下,我该怎么做? 或者有什么我错过了。我在 Windows 10 上使用 Visual Studio 2017。

我不精通 C++ 的工作原理,因此非常感谢详细的解释。

【问题讨论】:

Cygwin 生成的静态库(带有 .a 后缀)与 Visual C++ 链接器期望的 .lib 静态库不同。并由两个不同的编译器生成。如果没有预先构建的现有 Visual C++ 库,则必须查找 Visual Studio 项目文件。如果没有,那么您必须尝试使用​​库的源文件和头文件创建自己的库项目。 一个现实的选择是编译一个 DLL。这样可以避免在 Visual Studio 项目中使用 source 代码。相反,您将使用 Windows 的运行时链接。 Cygwin 和 Visual Studio 都知道 Windows 运行时链接的工作原理。 【参考方案1】:

我使用 Yaakov 的 answer 将 potrace 编译为 .a 文件来工作

./configure --prefix=/usr/x86_64-64-ming32/sys-root/mingw --host=x86_64-w64-mingw32 --with-libpotrace

然后

make

之后,我使用了 Stuti Rastogi 的 answer 来了解如何在 Visual Studio 中链接 .a 文件。

【讨论】:

以上是关于如何在 Visual Studio 中将用 C 编写的源代码从另一个项目包含到我自己的 C++ 项目中的主要内容,如果未能解决你的问题,请参考以下文章

如何用visual studio2012编c++程序?

如何在 Visual Studio for Mac 中将参数传递给 Main() C#

如何在 Visual Studio 2015 调试中将“%”符号作为命令行参数 (argv) 传递?

在 Visual Studio 中将串口应用程序从 C# 转换为 C (ERROR_INVALID_PARAMETER) 87

如何在 Visual Studio C++ 中将西里尔文(俄语)字符输出到控制台?

怎么用Visual Studio 2008编写C++程序?