什么是堆栈对齐?为什么用它?可以通过编译器设置来控制吗?
这个问题的细节来自于尝试将ffmpeg库与msvc一起使用时遇到的问题,但我真正感兴趣的是对"堆栈对齐"的解释.
细节:
谢谢,
担
我正在尝试使用xlsLib从C++应用程序创建Excel电子表格.
麻烦的是编译xlsLib,我给了一个.a文件(由MinGW生成的GCC静态库).但是,我的应用程序依赖于另一个PhysX仅使用Visual Studio编译的API().
因此:是否可以将GCC静态库(xlslib.a)转换为Visual Studio静态库文件(xlslib.lib)?
我有这个CMakeLists.txt文件的问题:
cmake_minimum_required(VERSION 2.6)
SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc)
SET(CMAKE_CXX_COMPILER C:/MinGW/bin/g++)
project(cmake_test)
add_executable(a.exe test.cpp)
Run Code Online (Sandbox Code Playgroud)
使用:调用cmake cmake -G "MinGW Makefiles",它失败并显示以下输出:
c:\Users\pietro.mele\projects\tests\buildSystem_test\cmake_test>cmake -G "MinGW Makefiles" .
-- The C compiler identification is GNU 4.6.1
-- The CXX compiler identification is GNU 4.6.1
-- Check for working C compiler: C:/MinGW/bin/gcc
CMake Error: your C compiler: "C:/MinGW/bin/gcc" was not found. Please set CMAKE_C_COMPILER to a valid compiler path or name.
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Check for working C …Run Code Online (Sandbox Code Playgroud) 由于"gcc -mno-cygwin"不再起作用,我一直在寻找一种方法来在我的Cygwin环境中运行一个以MinGW为目标的GCC.(此时不能运行MSYS环境.)
Cygwin安装程序提供了一个"gcc-mingw"软件包,其中包括:
lib/gcc/i686-pc-mingw32/3.4.4/cc1.exe
lib/gcc/i686-pc-mingw32/3.4.4/collect2.exe
lib/gcc/i686-pc-mingw32/3.4.4/crtbegin.o
lib/gcc/i686-pc-mingw32/3.4.4/crtend.o
Run Code Online (Sandbox Code Playgroud)
缺少的是"gcc"前端.那么,我该如何实际调用这个编译器呢?我希望不必手动通过"cc1",对吗?
我用Google搜索,但找不到与此主题相关的任何内容......
我已经按照以下一步一步的指南进行了操作,经过一些小小的尝试后,我已经设法使用代码编译clang:blocks和MinGW.太好了,所以现在我可以将Clang模块添加到eclipse(为什么有一个IDE,当你可以有四个)并开始编译.
我可以编译一个不使用标准库的简单程序,但不幸的是,当我尝试编译它时:
#include <iostream>
using namespace std;
int main()
{
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先我得到这个:
..\src\test.cpp:9:10:致命错误:找不到'iostream'文件
所以我将Mingw标题添加到include路径; 然后我明白了:
'致命错误:'找不到位/ c ++ config.h'文件'
这很奇怪.如果该文件不在'bits /'中,为什么MingW会工作?它是内置于编译器吗?没关系,我找到它的实现并在'bits /'中创建文件.
然后我得到了一大堆错误,包括奇怪的错误,似乎暗示clang没有正确实现预处理器,否则我对预处理器的理解是不正确的.
C:\Program Files\CodeBlocks\MinGW\lib\gcc\mingw32\4.4.1\include\c++/cwchar:45:26: error: expected value in expression
#if _GLIBCXX_HAVE_WCHAR_H
Run Code Online (Sandbox Code Playgroud)
还有更多这样的人.应该是这样的
#if defined(_GLIBCXX_HAVE_WCHAR_H)
Run Code Online (Sandbox Code Playgroud)
要么
#ifdef _GLIBCXX_HAVE_WCHAR_H?
Run Code Online (Sandbox Code Playgroud)
如果他们是MinGW标准库是错误的.
我假设我错误地认为可以放入clang替换gcc并且它不适用于gnu标准库.任何确认或否认这一点,以及证据支持将是最受欢迎的!
那么,有没有人有一个万无一失的方法来在Windows PC上进行clang编译?网上有关于铿锵声的信息,特别是关于窗户的信息.
我真的很想让clang和LLVM工作,因为它们从我读过的内容中听起来很棒.任何帮助,将不胜感激.
谢谢.
我在D:\ mingw中安装了MinGW.我的Git用C安装:\ Program Files文件\饭桶.我想使用MinGW开发/编译并使用git进行版本控制.
我想我必须使用正确的路径,但有些路径是硬编码的.像msys mount脚本调用/bin/msysmnt.exe一样
所以我有两个选择:1.使用git的shell(能够在提示符下显示分支)2.使用mingw(msys)的shell - 拥有正确的路径
无论我选择哪个,我必须使其他功能在其下工作.
我是一个狂热的Python用户,似乎我需要在我的Windows机器上安装MinGW来编译一些库.我对MinGW和GCC有点困惑.这是我的问题(从真实的虚拟观点来看):
所以Python是解释和编译的语言.有Linux的Linux和Windows实现,只需安装并使用二进制文件来执行他的代码.它们捆绑了一堆你可以使用的内置库.我读过的内容与Ruby相同.
现在,我已经完成了C的一小部分,我知道有人可以编译它.它有自己的内置库,可以使用它们称为头文件.现在,回到学校的那天,C,正在一个名为Turbo-C的vi类IDE中编写代码,然后按F9编译它.这几乎是我的C教育结束的地方.
什么是MinGW,什么是GCC?我一直主要研究Windows系统,甚至最近开始使用Cygwin.他们不一样吗?
对这些区域进行简单解释会有所帮助.
(如果这篇文章听起来很愚蠢/愚蠢,我很抱歉.我以为我会问这里.忽略这些核心位从来没有让任何人成为更好的程序员.)
感谢大家.
我想做的事情如下:
#ifdef GCC
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__;
#endif
Run Code Online (Sandbox Code Playgroud)
由于我想使用漂亮的PRETTY_FUNCTION,据我所知只有gnu支持所以我需要检测我是否正在编译g ++和MinGW,我该怎么做?我猜我需要知道的是编译器的预处理器定义,就像我在下面为Microsoft做的那样.
#ifdef WIN32
#define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ );
#define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ );
#endif
Run Code Online (Sandbox Code Playgroud)
如何在C++预处理器中检测g ++和MinGW?
我在尝试 inttypes.h 时编写的简单程序:
#include <stdio.h>
#include <stdbool.h>
#include <inttypes.h>
bool get_bit(uint32_t x, uint8_t n) {
x >>= n;
return x & 1;
}
int main() {
uint32_t x;
uint8_t n;
printf ("Enter x: ");
scanf("%"SCNu32, &x);
printf ("Enter n: ");
scanf("%"SCNu8, &n);
printf("The %"PRIu8"th bit of %"PRIu32" is: %d", n, x, get_bit(x, n));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的手机(64 位八核 ARN LTE Soc Android 10)上,它工作正常:
Enter x: 1
Enter n: 0
The 0th bit of 1 is: 1
Run Code Online (Sandbox Code Playgroud)
但在我的计算机(64 位 x86 Windows …
目前正在尝试使用MinGW在Windows上设置我的C开发环境,看起来CMAKE给了我以下错误:
sh.exe was found in your PATH, here:
C:/Program Files/Git/user/bin/sh.exe
For MinGW make to work correctly sh.exe must NOT be in your path.
Run cmake from a shill that does not have sh.exe in your PATH.
If you want to use a UNIX shell, then use MSYS Makefiles
Run Code Online (Sandbox Code Playgroud)
该错误正在CLION IDE中抛出.我不确定我是否需要更改CLion内部的设置或者什么.我查看了我的Windows路径,但没有看到任何对sh.exe的引用.
我的路径如下:
C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files (x86)\Nodist\bin;C:\Users\wesle\AppData\Local\Microsoft\WindowsApps;
Run Code Online (Sandbox Code Playgroud)