Articles of gcc

fork()在linux gcc中的工作

fork()创build一个新的进程,subprocess从父进程的当前状态开始执行。 这是我在Linux中对fork()了解。 所以相应的下面的代码: int main() { printf("Hi"); fork(); return 0; } 只需按照上述内容打印“Hi”一次。 但是在Linux上执行上面的代码,遵循gcc,它打印两次 “Hi”。 有人可以向我解释使用fork()实际上发生了什么,如果我已经正确理解fork()工作吗?

包含头文件时,path是否区分大小写?

鉴于这个目录树: src/MyLibrary/MyHeader.h src/file.cpp file.cpp: #include "mylibrary/myheader.h" … 编译file.cpp与VS一起工作,在gcc中失败。 标准说什么? 如果path区分大小写,为什么这是明智的? 什么是最好的做法,保持所有文件/文件夹名称小写,因此包括时做相同? 谢谢。

如何告诉MinGW链接器不要导出所有符号?

我正在使用MinGW工具链构buildWindowsdynamic库。 要build立这个库,我静态地链接到其他2提供了一个API,我有一个.def文件,我写了唯一的符号,我想在我的图书馆出口。 问题是GCC正在导出所有的符号,包括我链接的库中的符号。 是否有告诉链接器只是导出def文件中的符号? 我知道有选项–export-all-symbols但似乎没有相反的意思。 现在构build脚本的最后一行有这样的结构: g++ -shared CXXFLAGS DEFINES INCLUDES -o library.dll library.cpp DEF_FILE \ OBJECT_FILES LIBS -Wl,–enable-stdcall-fixup 编辑:在关于链接器的文档中 ,它表示–export-all-symbols是默认行为,当你不提供def文件时,如果你不提供def文件,它将被禁用。 无论如何,第三方库中的符号都被导出。 编辑:添加选项–exclude-libs LIBS或–exclude-symbols SYMBOLS不会阻止导出库中的符号。

在Linux上比Windows更快的相同的程序 – 为什么?

在这个问题的解决scheme被发现问题Executable比Windows运行得更快 – 为什么? Glibc的floor()可能是以系统库的forms实现的。 我有一个非常小的C ++程序(〜100行)进行物理仿真。 我已经在同一台计算机上的Ubuntu Oneiric和Windows XP上使用gcc 4.6.1进行编译。 我使用完全相同的命令行选项(相同的生成文件)。 奇怪的是,在Ubuntu上,程序的完成速度比在Windows上快得多(〜7.5s vs 13.5s)。 在这一点上,我认为这是一个编译器的差异(尽pipe使用相同的版本)。 但更奇怪的是,如果我在wine下运行Windows可执行文件,它的速度仍然快于Windows(我得到了11秒“真实”和7.7秒“用户”时间 – 这包括葡萄酒的启动。 我很困惑。 当然,如果相同的代码在同一个CPU上运行,那么时间就不会有差别。 这可能是什么原因? 我可能做错了什么? 该程序做最小的I / O(输出一行),只使用STL的一个固定长度的vector (即不应该涉及系统库)。 在Ubuntu上,我使用默认的gcc,并在Windows上Nuwen发行版 。 我证实了在进行基准testing时CPU使用率接近于零(我closures了大部分程序)。 在Linux上,我使用time进行计时。 在Windows上,我用timethis.exe 。 UPDATE 我做了一些更精确的计时,比较Windows XP,Wine和Linux上gcc和msvc编译程序的不同input(运行时间必须与input成比例)的运行时间。 所有数字都以秒为单位,并且是至less3次运行的最小值。 在Windows上,我使用timethis.exe (挂墙时间),在Linux和Wine上使用时间(CPU时间)。 (timethis.exe打破了Wine)我确定没有其他程序正在使用CPU并禁用了病毒扫描程序。 gcc的命令行选项是-march=pentium-m -Wall -O3 -fno-exceptions -fno-rtti (即禁用了exception)。 我们从这些数据看到: 差异不是由于进程启动时间所致,因为运行时间与input成正比 在Wine和Windows上运行的区别仅在于gcc编译的程序,而不是msvc编译的程序:它不能被其他程序在Windows上占用CPU或timethis.exe被破坏。

哪个gcc发行版支持__declspec(dllexport)_cdecl和_stdcall

我正在尝试使用mingw(MinGW-w64)和Eclipse在C ++ Builder中工作很长一段时间。 我很困惑。 我的工作主要围绕着供应商提供的以MSVC为中心的API。 它由3个头文件和几个库组成。 我能够在C ++ Builder中使用它们的头文件,但是运行了很多g ++的问题。 #define GX_WRAPPER_FUNC __declspec(dllexport) #define GX_STANDARD_FUNC #define GX_WRAPPER_CALL _cdecl #define GX_STANDARD_CALL _stdcall #define GX_OBJECT_PTR void* #define GX_VAR #define GX_CONST const #define GX_VOID void #define GX_LONG long #define GX_DOUBLE double #define GX_HANDLE long #define GX_LONG_PTR long* #define GX_DOUBLE_PTR double* #define GX_HANDLE_PTR long* #define GX_ASTR_PTR char* #define GX_WSTR_PTR […]