首页
学习
活动
专区
圈层
工具
发布

为什么说c,c++不能跨平台,编译器是在计算机操作系统上的吗,难道说编译器不在c,c++程序里吗?

从事软件开发多年对于C/C++用的比较多,可以明确说这两种编程语言也是支持跨平台,肯定还是有很多人问什么是真正意义上的跨平台,所谓的跨平台就是同一套代码在不同的操作系统都能直接去运行,这里面涉及到一个很重要的问题...,在java这门编程语言刚开始流行的时候就提到了跨平台的功能,在windows上运行的jar包直接放在linux上也能直接去运行,单纯从C/C++角度出发也是能够实现这种功能的,因为其语法实现是相同的。...,这就是编译器存在的价值,编译器的执行中也是分为几个阶段,对于linux下C语言编译过程有所了解的话,都会发现后缀为 .c 的程序文件首先转化成 .o 的中间文件,然后经过 .o 转化成可执行的二进制文件...编译器其实就是一种转化工具,将程序转化成能够运行的二进制文件,一般而言C/C++编译器是可以通用的,不同的操作系统使用不用的编译器底层。 ?...编译器是一种工具包的集合,内部的实现也涉及到C/C++的编程,编译器的通常说的编程代码还是存在一定的差异,编译器是为代码转化做服务的,真正实现跨平台的基础部件编译器算是一种,因为不同的操作系统或者计算机架构需要具体的对应实现

3.5K10

Mac OSX 下build VLC工程记录

对VLC突然来了好奇心,所以像研究一下VLC,但是首先要编译一下VLC,将应用编译出来然后测试才能更顺利; 在网上找了一下,几乎没有可用的,算了,看别人转帖的blog还不如自己琢磨了,然后就参考官方文档...cc export CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c+.../Work/multimedia/vlc/extras/tools/build/bin:$PATH 当然,我自己定制的所有的工具,我都会与系统原生的区分开,我的PATH原来多了一个/opt/local.../extras/package/macosx/build.sh + ARCH=x86_64 + MINIMAL_OSX_VERSION=10.6 + OSX_VERSION=10.8 ++ xcode-select.../configure.sh --build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10 --with-macosx-version-min=10.6

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用xmake构建c++20 modules

    c++ modules已经正式纳入了c++20草案,msvc和clang也已经基本实现了对modules-ts的支持,随着c++20的脚步离我们越来越近,xmake也开始对c++modules提前做好了支持...模块接口文件 上文所述的*.mpp是xmake推荐的模块接口文件命名,其实各家编译器对于模块文件的默认后缀名都是不统一的,clang下是*.cppm,而msvc下是*.ixx,这对于编写跨编译器统一的模块项目是非常不友好的...,这里由于*.mpp不是编译器默认的模块接口文件名,因此xmake加上了-x c++-module来强制作为模块接口文件来编译。...编译*.mpp模块接口文件,最后会生成*.pcm模块文件最终通过-fmodule-file来告诉clang编译器,我们编译的main.cpp里面hello模块定义在哪里,避免编译main.cpp时候出现...hello module未定义的编译器错误。

    2.1K40

    Python - 笔记1

    静态方法:可以直接用类名来调用的方法,不需要创建对象,不会隐式的传送self。 根据面向对象的设计原则,应该将对象的职责封装到类的代码内部,尽量简化调用一方的代码调用。...1.1 方法的分类 实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法); 调用:只能由实例对象调用。...$ pip install pygame Collecting pygame Using cached https://files.pythonhosted.org/packages/b2/6b/c510f0853765eb2219ca5aa3d416d65bb0dea7cd9bb2984aea0a0e04c24d...src/sdlmain_osx.m -o build/temp.macosx-10.6-intel-3.5/src/sdlmain_osx.o In file included from src.../sdlmain_osx.m:24: /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks

    69010

    xmake v2.5.9 发布,改进 C++20 模块,并支持 Nim, Keil MDK 和 Unity Build

    另外,我们对 C++20 Modules 进行了大改进,不仅支持最新 gcc-11, clang 和 msvc 编译器,而且还得模块间依赖做了自动分析,实现最大程度的并行化编译支持。...那么,合并编译就会带来编译冲突问题,编译器通常会报全局变量重定义错误。 为了解决这个问题,我们需要用户代码上做一些修改,然后配合构建工具来解决。...更多例子见:C++ Modules Lua5.4 运行时支持 上个版本,我们增加了对 Lua5.3 运行时支持,而在这个版本中,我们进一步升级 Lua 运行时到 5.4,相比 5.3,运行性能和内存利用率上都有很大的提升...$ xmake f -p wasm --toolchain=wasi $ xmake Circle 工具链支持 我们还新增了 circle 编译器的支持,这是个新的 C++20 编译器,额外附带了一些有趣的编译期元编程特性...C++17/20 编译器特性检测 xmake 提供了 check_features 辅助接口来检测编译器特性。

    3K10

    最新版MacOS(10.13.2)编译Android 4.4.4源码

    在官方文档中,我们看到Mac系统和可编译的对应Android版本: ? 然而,在谷歌上搜索能发现,有人在更高版本的系统上编译成功: ? 那就说明在最新的MacOS上编译应该也是可行的。...在Mac上建一个大小写敏感的文件系统,并挂载,见官方文档,鉴于我的硬盘不是很大,只分配了100G的空间。 2....按照官网上的方法开始下载,我选择了android4.4.4_r1,tag为:KTU84P。 3. 趁下载的时候,准备相应的编译环境: a. Java JDK 6 b. XCode 6.4 c....Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk //进入源码根目录 //找到/build/core/combo/HOST_darwin-x86...其实这些问题本该由Google来适配的,但是因为大家操作系统、版本、组件等并不完全统一,Google就只在特定的Mac版本上适配了。那我们遇到问题就只能自己动手解决了。

    1.3K40

    Python不同操作系统下的安装及配置

    next安装完成就OK,其中要记录一下Python的安装路径:C:\Python27,在后面的环境变量设置的时候会用到这个目录。...c)进入cmd测试Python的环境变量是否设置成功,设置成功情况下输入python,可以看到python的版本号 测试:输出hello world代码,查看是否正常输出。 ?...linux下安装python Linux系统目前企业用的最多的版本应该是centOS,因为他是开源免费的,redhat系统也有一部分在用,ubuntu很多研发在用,大多数的linux系统是自带python...解析器的,所以不需要安装,你可以在shell上执行命令python,就可以看到进入python的交互模式,并显示出python版本等信息,如下图所示, 下载python: ?...b)从官网下载安装 大家可以从https://www.python.org/ftp/python/2.7.14/python-2.7.14-macosx10.6.pkg下载安装需要python版本,安装比较简单

    1.1K20

    Mac OS X下GnuPlot的安装

    Mac下的安装: Mac下的Gunplot有两个主要的形式:第一个就是Carbon二进制的文件,如果你运行的是经典的Mac OS系统(OS X之前),那这个可能是你唯一的选择。...如果你只是希望能够看到一个gnuplot文件的输出结果,而不需要安装软件到系统上,那么使用这个版本会非常方便。它不需要X-Windows或者其他的软件,安装简便,但是缺乏一些外部的控制。...系统:Mac OS X 10.6.8,安装了xCode;      gnuplot 4.4.3      zlib 1.2.5      libjpegv8c      FreeType2.4.5     ...4、libjpegv8c,下载解压缩后进入目录执行      export MACOSX_DEPLOYMENT_TARGET=10.6      ....参考资料: 1、gnuplot homepage 2、Mac OS X安装Gunplot 3、Installing gnuplot on Mac OS X 10.6 4、http://www.libgd.org

    3K10

    getline函数(精华版)

    另外要注意,C++中有两个getline函数,一个是在string头文件中,定义的是一个全局的 函数,函数声明是istream& getline ( istream& is, string& str,...char数组 中而不可以将该参数声明为string类型,因为C++编译器无法执行此默认转换。...cout<<a; } 输出结果是a 其实istream的getline是在全局函数的getline函数的基础上,又多了一个终止读取的条 件,即根据已读取的字符的个数来判定,实际上是读取n-1个字符,因为最后要为...一样: a b c d e f g h i j k k k k k 这说明第九次getline之后,get指针所指向的位置并没有改变,这说明我想的思路有问题 ,于是我在网上看了getline函数的源码...========================================================================== 好吧,可能是编译器的问题,用比的编译器编译运行了一下

    1.8K40

    C++惯用法之消除垃圾收集器-资源获取即初始化方法(RAII)

    在这种情况下,它们返回一个空指针,其访问是未定义的行为;在最好的情况下,你的程序会崩溃。在最坏的情况下,你的程序看起来会工作一段时间,在崩溃前处理垃圾数据。...他将其称为“资源获取就是初始化”,其基本见解如下:可以指定对象具有构造函数和析构函数,这些构造函数和析构函数在适当的时候由编译器自动调用,这为管理给定对象的内存提供了更为方便的方法。...对于编译器而言,返回调用是最容易优化以优化语义移动的情况,因为它知道在进行任何进一步访问之前不久将销毁源。...这些问题降低了垃圾收集语言在性能至关重要或需要实时应用程序的情况下的适用性。即使在以下玩具程序上,也可以看到实际的性能下降: $ make cpp && time ...."; return 0; } 4.只有在最后,你才意识到RAII的真正力量。 自从编译器发明以来,手动内存管理是程序员一直在想办法避免的噩梦。

    1.1K20

    string和stringstream用法详解「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 一、string string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。...,再用 >> 把个別的资料输出,例如: string s; stringstream ss; int a, b, c; getline(cin, s); ss.clear(); ss.str(s);...但是,对上面代码的一个微小的改变就会使程序崩溃: int n=10000; char s[10]; sprintf(s,”%f”,n);// 看!...库是最近才被列入C++标准的。(不要把与标准发布前被删掉的弄混了。)因此,老一点的编译器,如GCC2.95,并不支持它。...如果你恰好正在使用这样的编译器而又想使用的话,就要先对它进行升级更新。

    2.5K20

    头文件cstring、string、string.h的区别「建议收藏」

    std::string 类实际上是 STL 模板类 std::basic_string 的具体化。...C风格字符串 C 风格字符串是一种特殊的字符数组。 该数组的最后一个字符为空字符‘\0’。这也被称为字符串结束字符,因为它告诉编译器,字符串到此结束。...在代码中使用字符串字面量时,编译器将负责在它后面添加‘\0’。...读取一整行 有时我们希望能在最终得到的字符串中保留输入时的空白符,这时候应该用getline函数代替原来的>>运算符。...getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被都进来了),然后把所读的内容存入到string对象中(注意不存换行符)。

    3.9K10

    iOS编译原理

    主要内容: 理解C、C++以及OC的关系 编译型语言与解释型语言 编译器LLVM与CLang 理解iOS编译流程 预处理 编译 汇编 链接 一、理解C、C++以及OC的关系 1.C语言 C语言是一门面向过程的计算机编程语言...,既可用于系统软件开发,也适用于应用软件开发; C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows,Mac OS X, Linux, Unix等; C语言的设计影响了众多后来的编程语言...NSString *test =(id) [[NSArray alloc] init]; OC与C++在使用细节上的不同如下: 定型:OC是动态定型,可以允许根据字符串名字来访问方法和类,还可以动态链接和添加类...,而新增一种CPU架构只需要修改后端即可; 2.LLVM与Clang LLVM是苹果当前使用的编译器: LLVM是一套编译器基础设施项目,为自由软件,以C++写成,包含一系列模块化的编译器组件和工具链...CLang基于LLVM,是一个高度模块化开发的轻量级编译器; CLang主要来自苹果电脑的支持,同时支持C、Objective-C以及C++; CLang用于替代Xcode5版本前使用的GCC,编译速度提高了

    3.7K20
    领券