使用 Linux C 代码和头文件编译 Windows DLL

Posted

技术标签:

【中文标题】使用 Linux C 代码和头文件编译 Windows DLL【英文标题】:Using Linux C code and header files to compile a Windows DLL 【发布时间】:2012-11-03 16:43:27 【问题描述】:

我想知道通常是否可以使用 Visual C++ 2010 从 C 代码和我在 Linux 发行版中找到的头文件创建 C++ DLL。

理论上,如果我从 Linux 中取出一段 C 代码(包含不同的头文件),在 Linux 文件系统中找到链接项目所需的所有头文件,我是否能够成功编译使用 Visual C++ 2010 在 Windows 中进行项目?

是否有一些示例或教程?

编译 DLL 后,我想在 C# 应用程序中使用它,我将在 Linux 下使用 Mono 运行该应用程序。

【问题讨论】:

如果源码中也包含了整个Linux内核,那么……那么还是不行,因为MSVC不遵守标准,所以portable C不能移植到Windows。 @H2CO3:即使 MSVC 尊重标准,仅将内核编译到您的应用程序中也不会使其工作。当然,除非您制作系统替换驱动程序:) @Dani 是的,当然我的意思是如果必要的部分(包括系统服务、系统调用等)可以与程序一起编译,理论上可以工作。但是请看,这远非现实。 【参考方案1】:

不,仅使用头文件可能无法实现。 问题是一些函数(通常是大多数)是在目标文件和共享库中定义的,而不是在头文件中定义的,因此没有目标文件和共享库就无法编译它们。 对象文件和共享库不是跨平台的,因此您无法复制它们。 唯一的解决方案是使用像Cygwin 这样的系统,它具有为 Windows 编译的 linux 头文件和目标文件/dll。

【讨论】:

以上是关于使用 Linux C 代码和头文件编译 Windows DLL的主要内容,如果未能解决你的问题,请参考以下文章

C++std命名空间和头文件详解

Visual C++6里创建源文件和头文件有啥区别

如何在VS2010中运行编译C和C++?

Xcode - 如何将 c 库和头文件包含到可可项目中?

extern和头文件到底有什么作用?

如何解决gcc编译c程序找不到头文件的问题