我正在设计一种编程语言,我正在思考的问题之一就是为什么编程语言需要很长时间才能编译.假设c ++需要很长时间,因为它需要在每次编译文件时解析并编译头文件.但是i -heard-预编译的标题需要多长时间?我怀疑c ++不是唯一有这个问题的语言.
这是一个面试问题.我说他们是一样的,但这被判定为不正确的回应.从汇编程序的角度来看,有什么可以想象的区别吗?我使用默认的gcc优化和-S编译了两个简短的C程序来查看汇编程序输出,它们是相同的.
c compiler-construction assembly compilation compiler-optimization
简介:我想利用编译器优化和处理器指令集,但仍然有一个可移植的应用程序(在不同的处理器上运行).通常我可以编译5次,让用户选择正确的运行.
我的问题是:我怎样才能自动执行此操作,以便在运行时检测处理器并执行正确的可执行文件而无需用户选择它?
我的应用程序有很多低级数学计算.这些计算通常会持续很长时间.
我想利用尽可能多的优化,最好也是(并不总是支持)指令集.另一方面,我希望我的应用程序可移植且易于使用(因此我不想编译5个不同的版本并让用户选择).
是否有可能编译我的代码的5个不同版本并动态运行在执行时可能的最优化版本?有5个不同的版本,我的意思是不同的指令集和不同的处理器优化.
我不关心应用程序的大小.
此刻我在Linux上使用gcc(我的代码是用C++编写的),但我对英特尔编译器和MinGW编译器的编译也感兴趣.
可执行文件不一定能够在不同的操作系统上运行,但理想情况下也可以自动选择32位和64位.
编辑:请明确指示如何操作,最好使用小代码示例或解释链接.从我的角度来看,我需要一个超级通用的解决方案,它适用于我后来的任何随机C++项目.
编辑我将奖金分配给了ShuggyCoUk,他有很多指针需要注意.我本来希望在多个答案之间拆分,但这是不可能的.我还没有实现,所以问题仍然是"开放"!请继续添加和/或改进答案,即使不再给予奖励.
谢谢大家!
我正在使用以下命令在OSX上从命令行编译我的(相当简单,只有5个文件和几百个LOC)应用程序:
ant debug
有用.但它运作缓慢:
BUILD SUCCESSFUL
Total time:
26 seconds
这是为什么?即使我只更改一个java文件中的一行,也需要很长时间.大部分时间都花在dex舞台上(约20秒),这是AFAIK创建Dalvik字节码.但我的朋友也使用Eclipse在Windows上使用相同的项目,他说编译只需要一两秒钟就可以在他的机器上运行.有什么办法可以加快这个过程吗?
我在C++中编写了一个非常简单的类,即http://www.cplusplus.com/doc/tutorial/classes/中的Rectangle类.特别是这里是Header文件(Rectangle.h)的内容:
#ifndef RECTANGLE_H
#define RECTANGLE_H
class Rectangle {
private:
double m_x;
double m_y;
public:
Rectangle();
Rectangle(double, double);
void setXY(double, double);
double getArea();
};
#endif
Run Code Online (Sandbox Code Playgroud)
这是实现(Rectangle.cpp):
#include "Rectangle.h"
Rectangle::Rectangle() {
setXY(1, 1);
}
Rectangle::Rectangle(double x, double y) {
setXY(x, y);
}
void Rectangle::setXY(double x, double y) {
m_x = x;
m_y = y;
}
double Rectangle::getArea(void) {
return m_x * m_y;
}
Run Code Online (Sandbox Code Playgroud)
现在,我应该在我的主类中包含矩形标题,即:
#include <stdlib.h>
#include <iostream>
#include "Rectangle.h"
using namespace std;
int main(void) {
Rectangle a;
cout << …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习如何使用带有C绑定的D-Bus.我以前从未使用过D-Bus.我正在学习本教程,我认为这是官方教程(Freedesktop.org).我已经读过它,直到这个段落给出了第一个示例程序,但不幸的是我在这个页面上没有看到任何关于如何编译它或包含哪些库的指示.我错过了什么 ?
我的操作系统是Ubuntu 10.04 32bit.我安装了libdbus-glib-1-dev包.我试图#include <dbus/dbus.h>在源文件的开头添加,并使用
$ gcc -ldbus-1 -I/usr/include/dbus-1.0/ -I/usr/lib/i386-linux-gnu/dbus-1.0/include -o my_dbus.bin my_dbus.c
Run Code Online (Sandbox Code Playgroud)
但我一直都在失败:
my_dbus.c: In function ‘main’:
my_dbus.c:7:3: error: unknown type name ‘DBusGConnection’
my_dbus.c:8:3: error: unknown type name ‘GError’
...
Run Code Online (Sandbox Code Playgroud)
我是否错过了教程中的一点?不,你能帮我编译这段代码吗?
提前致谢.
我正在尝试理解Makefile,但我不理解评论的配方行.
...
...
sample.a:
cd ../$(basename $(notdir $@)) && make ##i don't understand this
...
...
Run Code Online (Sandbox Code Playgroud)
我还是个新手.你能给我一个非常简单的解释:
$(basename $(notdir $ @))
我正试图让grunt-contrib-less为我编译一个更少的文件.我有以下gruntfile:
less: {
files: {
"httpdocs/static/assets/css/result.css": "httpdocs/static/assets/css/dashboard.less"
}
},
Run Code Online (Sandbox Code Playgroud)
路径肯定是正确的,我已经三次检查这些文件是否存在,但是,当我运行grunt时,我得到以下消息:
Running "less:files" (less) task
>> Destination not written because no source files were provided.
Run Code Online (Sandbox Code Playgroud)
我的gruntfile中缺少什么才能正确编译较少的文件?我正在撕扯我的头发,因为我知道这可能是非常简单但我无法理解的.
我想更快地进行cythonize.一个.pyx的代码是
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("MyFile.pyx")
)
Run Code Online (Sandbox Code Playgroud)
如果我想要cythonize怎么办?
有几个ext .pyx的文件,我会用他们的名字打电话
文件夹中的所有.pyx文件
在两种情况下,setup.py的python代码是什么?
我正在编写一个c ++库,它公开了一些仅由C#代码使用的函数.但是,由于我意外地错误输入了参数,我发现只要我不在cpp文件中使用(没有错误的版本)函数,即使没有任何警告,也可以成功编译和链接此代码.
struct Dummy { int a; double b; };
extern "C" void SetArray(Dummy* x, int cnt);
void SetArray(Dummy x, int cnt)
{
// a TODO placeholder.
}
Run Code Online (Sandbox Code Playgroud)
如何让编译器为这种情况抛出错误或警告?编译器选项-Wall已设置但仍然没有警告.使用tdmgcc 5.1.0.
compilation ×10
c++ ×4
c ×3
performance ×2
android ×1
assembly ×1
css ×1
cython ×1
dbus ×1
dex ×1
extern ×1
gcc ×1
glib ×1
gruntjs ×1
header-files ×1
installation ×1
javascript ×1
less ×1
linux ×1
makefile ×1
optimization ×1
overloading ×1
python ×1
setup.py ×1