c++的编译环境及交叉编译

-- c++的编译环境及交叉编译(CMake,MingW,CygWin..)
【官网】:#

应用场景

对于自己的或者开源项目的c++项目的编译,我们通常遇到一些问题,需要用这些工具来处理项目工程的配置,编译过程控制,交叉环境配置等

基础资源

使用须知

如果是c++开源项目,务必仔细查阅官方文档以及编译安装说明。

配置步骤

>c/c++编译命令工具.

>>Mingw.

官网:http://www.mingw.org/

[参考1]windowsMingW各个包的作用:参考.

https://blog.csdn.net/weixin_34007020/article/details/93329429?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase


>>Cygwin.

官网:http://www.cygwin.com

[问题1]cygwin的安装,编译,调试.

https://blog.csdn.net/thanklife/article/details/54913168?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

[问题2]cygwin的安装教程.

https://www.cnblogs.com/xym4869/p/12232331.html

[问题3]完全下载及安装.

https://blog.csdn.net/yilovexing/article/details/51911252

[问题4]添加安装包.

https://blog.csdn.net/OOFFrankDura/article/details/103914411

>>Cmake.

官网:https://cmake.org/documentation/

入门教程:https://www.hahack.com/codes/cmake/

下载地址:https://cmake.org/download/

[问题1]有时Cmake中找不到vs的高级版本?

需要下载最新版的Cmake可以看到.

[问题2]Cmake提示”could not find any instance of Visual Studio.”

本机没有安装所配置的vs版本。需要进行调整配置或者安装指定版本的vs.

[问题3]”CMake Error at CMakeLists.txt:28 (TARGET_LINK_LIBRARIES):
Cannot specify link libraries for target "MathRunner" which is not built by
this project.”.

#编译为静态链接库(这个顺序必须放到ADD_EXECUTABLE后面,否则会出问题)

TARGET_LINK_LIBRARIES (MathRunner ${EXTRA_LIBS})

#编译为.exe

ADD_EXECUTABLE (MathRunner ${DIR_UI_SRCS})

<解决办法>调整 TARGET_LINK_LIBRARIESADD_EXECUTABLE 的顺序即可.

[问题4]想清除配置,重新来.

>>linux编译及交叉编译.

>>>linux开发环境的搭建.

https://www.jianshu.com/p/78a1f1d4c55c


https://www.cnblogs.com/wuxiushu/p/5910629.html

https://www.linuxidc.com/Linux/2017-03/141704.htm

>>>linux上编译调试c++的常用命令.

https://www.cnblogs.com/yyehl/p/6862153.html

>>>vs2017+linux的开发环境.

https://www.cnblogs.com/yearsj/p/9600682.html

https://www.pianshen.com/article/8592852387/

https://zhuanlan.zhihu.com/p/30950892

https://www.cnblogs.com/xylc/p/6533716.html

>>>ubantu上生成.exe.

https://blog.csdn.net/linken_yue/article/details/82899975

>>>testdisk在linux下的编译.

https://blog.csdn.net/TSZ0000/article/details/101679501


<问题1>At least one of ncursesw,ncurses,pdcurses,curses library must be present.

[注1]yum -y install ncurses-devel .

Yum -y install uuid-devel

yum install e2fsprogs-devel uuid-devel libuuid-devel

[结果]

[2]安装mingw之前.

yum install gcc-c++ patch git

[注3]

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

<参考>https://fedoraproject.org/wiki/EPEL


yum install mingw64-gcc


>>>一个交叉编译的例子(linux上编译输出.exe并在windows上运行).

https://www.jianshu.com/p/7c7990353820


https://blog.csdn.net/cqdjyy01234/article/details/79405716?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase


https://blog.csdn.net/zhaihaibo168/article/details/103173626?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase


https://blog.csdn.net/yaoqiwaimai/article/details/82790122


Mingw64工具链的构建过程:

https://blog.hackpascal.net/2015/10/%E8%AE%B0%E4%B8%80%E6%AC%A1-mingw-w64-%E5%B7%A5%E5%85%B7%E9%93%BE%E7%9A%84%E5%88%B6%E4%BD%9C%E8%BF%87%E7%A8%8B/


>关于名词解释.

>>Cmake,Makefile,Makefile.am,Makefile.in,CMakeList.txt.

[1]makefile带来的好处就是——“自动化编译,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具.

[2]由于不同操作系统上甚至不同开发工具的make以来的makefile标准不一样,导致想实现跨平台开发一次开发到处编译变得很困难。CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix Makefile Windows Visual Studio 工程。从而做到“Write once, run everywhere”。

[参考]https://blog.csdn.net/qq_28038207/article/details/80791694

[3]

A1: makefile.am makefile.in避免重复编译,减少等待时间之用。

A2: make   install 时用

A3: automake 读取 Makefile.am 来产生 Makefile.in,

configure 读取 Makefile.in 来产生 Makefile

configure 脚本通常由 autoconf 读取 configure.in 产生

目的就是让程序员只写一个规则:.am文件/.in文件, 就能生成适合各种配置/平台的Makfiles

>>vcvisual studio版本对应关系.

Visual Studio 6 vc6

Visual Studio 2003 vc7

Visual Studio 2005 vc8

Visual Studio 2008 vc9

Visual Studio 2010 vc10

Visual Studio 2012 vc11

Visual Studio 2013 vc12

Visual Studio 2015 vc14

Visual Studio 2017 vc15

Visual Studio 2019 vc16

>>关于windows,mac,linux上的可执行程序的格式.

Windows:  pe

Linux:     ELF

Mac(ios):  math-o(Math-Object)

[1]Linux下的文件不需要扩展名。一切皆文件,包含设备文件、目录文件、普通文件等。

要知道是否是可执行文件,一般是通过 ls -l 命令看文件属性中是否包含可执行权限 (x)

为了提高文件可读性您仍可以使用文件名扩展,但这对 Linux 系统来说没有任何作用.

常见问题

快速入门

>编译遇到的问题及处理.

  >>github上的c++项目的编译.

[参考]

https://qastack.cn/superuser/1201567/how-do-i-install-a-windows-program-written-in-c-downloaded-from-github

<1>从项目的makefile判断,您将需要构建MINGW中的所有文件.

搜索Internet上其他位置的二进制文件。通常,DuckDuckGo类的搜索引擎(或Google,如果愿意的话)会很容易找到想要的东西。尝试搜索<application name> for Windows<application name> exe

自己编译。您需要至少具有一些编程语言的基本知识才能做到这一点。同样,搜索引擎可以提供巨大帮助。尝试搜索compile <application name> on WindowsMinGW compile <application name>

在这里,我将介绍Widnows编译实用程序的基础知识:

下载MinGW。我个人比较喜欢程序包,因为它带有boost(多个应用程序使用)和一个很酷的shell。它还带有git,如果您想编译托管在Github或其他Git版本控制存储库上的文件而不必单独下载源代码,则它非常有用

cmd或中运行以下命令powershell

cd c:\sources\hello:将目录更改为源文件所在的位置。

g++ helloworld.cpp -o helloworld.exe:这helloworld.cpp是主源文件helloworld.exe的名称,也是编译后的可执行文件的名称。

如果您必须编译多个文件,请在-o切换之前列出它们:g++ helloworld.cpp foo.cpp -o helloworld.exe

这些是C ++的说明。如果您要处理使C语言编写的应用程序,则文件扩展名为,.c而不是.cpp,而应使用gcc命令代替g++。其余部分大致相同

请注意,您可能需要指定更多命令行参数才能编译可执行正常的可执行文件。项目页面通常将包含这些详细信息。

您可能还需要研究makefile这篇 Stack Overflow帖子通常是关于makefile的,告诉我们如何在MinGW中使用它们。如果项目带有Makefile,请在手动编译源代码之前尝试一下

您现在应该可以运行了helloworld.exe

注意:大多数项目都带有README文件。请执行其名称所隐含的含义,这些文件包含有关编译和运行软件的重要信息,并且通过阅读它可以避免很多不必要的麻烦。

1注意:有时bin下载的文件中可能有一个名为的文件夹,其中应包含可用的可执行文件/二进制文件

如果要在Windows上使用GNU / Linux命令行实用程序,另请参见CygwinGOW。我在此处提供了一些有用的可执行文件的最新版本,以供下载。

进一步阅读:
http //www.mingw.org/wiki/MinGW_for_First_Time_Users_HOWTO
https://gcc.gnu.org/onlinedocs/index.html#dir
https://stackoverflow.com/questions/22873884/how-do-imingw运行配置

 

 

<2>

首先要注意的是,没有一种从源代码构建应用程序的方法。大约有与不同项目一样多的变体。也就是说,这是一些常规步骤:

如果幸运的话,项目通常会在README文件中提供构建说明。有时,可能还会有INSTALL文件或其他文档可用。如果可用,请按照说明进行操作。他们是你最好的选择。

就像其他人所说的,不幸的是,在没有说明的情况下很难重构所需的构建步骤。但是,我们至少可以在这里做出最大的努力,这将适用于大多数简单的项目。

缺少说明

如果找到带有.sln.vcxproj扩展名的文件,则可能是MSBuild / Visual Studio项目。下载Visual Studio CommunityExpress(用于C ++)的副本,在其中打开该项目文件,然后单击工具栏中的播放按钮(或使用生成菜单)。

 

如果找到一个Makefile,可能会需要make。但这是事情变得更加困难的地方,因为有许多使用的独立和不兼容的系统make

由于它是针对Windows的,因此可能会使用MinGW。下载该文件的副本,从开始菜单启动MSYS,导航(cd)到包含项目的目录,然后运行make

 

在极少数情况下使用Cygwin(不幸的是,没有简单的方法可以告诉您,但如果MinGW产生与“ posix”相关的错误,这是一个不错的选择),则必须安装Cygwin。不幸的是,这不会构建本机Windows二进制文件-您每次都必须通过Cygwin启动该程序。

 

构建工具可以是名称build.bat或类似名称的自定义脚本。在这种情况下,您必须将其打开并查看内部内容,或者尝试运行它并查看错误所在。如果您打开它并看到提及GCC,请回到2.2.1MinGW步骤,但运行自定义脚本而不是make

 

可能根本没有构建工具。如果遇到的只是一个文件.c或一个.cpp文件,那么它很简单,可以直接进行编译。同样它们几乎都是MinGW,因此请下载该文件,启动MSYS Shell,导航至目录,然后根据需要调用gcc或调用它g++-例如gcc -o program.exe program.c

 

这些可能都不起作用。如果您在任何步骤都收到错误消息,则它们可能包含丢失消息的线索。一种可能是您缺少某些必需的框架或库-如果您愿意,可以尝试下载这些框架或库并将其添加到构建环境中,但这通常不是一个简单的过程,并且变化太多,因此没有覆盖答案的方法。

 

  >>centos中编译错误解决办法集合.

https://www.93bok.com/CentOS%207%20%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%E9%9B%86%E5%90%88/

参考资料