Building Mingw executables using Cygwin

Windows 10 C语言环境搭建:Visual Studio、Code::Blocks与MinGW方案全解析 C语言作为编程的基石,其开发环境的搭建是学习与实践的第一步。在Windows平台上,由于系统生态的复杂性,环境配置常成为初学者的首要挑战。其核心原理在于编译器、链接器与系统库的协同工作,将源代码转换为可执行程序。掌握环境搭建不仅能提升开发效率,更是理解软件构建过程的关键。对于Windows用户,主流的C语言开发方案主要围绕集成开发环境与工具链的选择展开,这直接影响到学习曲线、调试体验与项目可移植性。本文聚焦于Visual Studio、Code::Blocks和MinGW这三种主流方案,深入剖析各自的安装流 阅读详情
  -mno-cygwin -- Building Mingw executables using Cygwin

Home Page:http://www.xraylith.wisc.edu/~khan/software/gnu-win32/
Author:Mumit Khan
Created:Sun Feb 21 13:19:34 1999
Updated:Mon Apr 5 14:28:08 1999

This howto provides some insight into creating Mingw executables, ie., applications that do not rely on Cygwin DLL, using Cygwin development environment.

TOC:
  - Introduction.
  - What's new?
  - What is this -mno-cygwin option and how does it work?
  - Yeah, but what's the problem?
  - Other sources of problems.
    * Cygwin b20.1 related problems
  - Where to get the "target" headers/libraries to create Mingw binaries/DLLs.

Last Modified: Mon Apr  5 13:16:08 CDT 1999

============ Introduction.

This document describes how to use Cygwin development tools to build
Mingw applications that do not depend on Cygwin DLL and only depend
on runtime libraries distributed as part of the OS (Win9x/NT). The
current Cygwin release, B20.1, is fully capable of compiling to Mingw
environment, but lacks the Mingw ("target") libraries to actually link
the final application in all but the simplest cases.

In this document, I'll refer to Cygwin as the "host" and Mingw as the
"target" system; eg., "target" libraries imply the libraries built for
Mingw applications. Using -mno-cygwin is really just a specialized and
simplified case of cross-compilation, where you're shielded from some
of the usual pains of cross-compilation.

I'll assume that you know what Cygwin and Mingw means. If you want a
quick introduction, see:

  http://www.xraylith.wisc.edu/~khan/software/gnu-win32/

After you look through my one-liner defintions, please follow the links
in the "Related Sites" for more information. Colin Peters, the "father"
of Mingw, maintains a web site with valuable information.

I'll also assume that you already have at least Cygwin B20.1 development
environment installed on your computer. The easiest way to do so is to
get the "full.exe" distribution from Cygnus Cygwin project:

  http://sourceware.cygnus.com/cygwin/

As of this writing, B20.1 is the latest release. Newer versions, as
they become available, should equally apply.

Cygwin B20.1 comes with the EGCS-1.1 compiler. I have since released
EGCS-1.1.1 (by the time you read this, there'll probably be a newer
release), and you can get all of this from my web site cited above.

============ What's new?

New since last posting of Feb-20-1999:
  - update mingw "extra" headers/libraries package
  - add info on _G_config.h when building C++ programs using iostreams
  - add info on creating Mingw DLLs using Cygwin dllwrap.

============ What is this -mno-cygwin option and how does it work?

The reason behind implementing the -mno-cygwin option is quite simple:
since you already have the Cygwin development tools loaded, wouldn't it
be nice to be able to create Mingw executables using the same compilers
and tools instead of having to load yet another set of Mingw-specific
development tools? In fact, this is precisely how the Mingw32 project
started (cf: Colin Peters Mingw32 web page), but it was quite messy
and involved to get things to work out correctly.

Geoffrey Noer of Cygnus later added the -mno-cygwin flag to make this
process easier. The idea is quite simple -- the default compilation
mode is "cygwin", and the compiler by default looks for header files
that are Cygwin specific and also links in the Cygwin runtime libraries.
When instead you specify -mno-cygwin, the development tools instead look
for Mingw32 headers and links in the Mingw32 runtime libraries.

To see how this works, consider the following trivial piece of code:

  /* hello.c -- hello world example. */
  #include <stdio.h>
  int main () {
      printf ("Hello world!\n");
      return 0;
  }

Let's say that you've installed Cygwin development tools on your system
and everything checks out. Now you want to build hello.exe as a Cygwin
application which will depend on Cygwin runtime DLL.

  $ gcc -c hello.c
  $ gcc -o hello hello.o

This will create hello.exe and you can now run it to test.

  $ ./hello
  Hello world!

To see what DLLs it's using:

  $ objdump -p hello.exe | grep "DLL Name"
        DLL Name: cygwin1.dll
        DLL Name: kernel32.dll

Note that you're using CYGWIN1.DLL that is part of the Cygwin distribution
and KERNEL32.DLL, which is part of the OS distribution. If you have not
purchased a Cygwin license from Cygnus, your application now falls under
the GNU General Public License (GPL), whether you intended that or not!
(Please don't send me email on whether that is good or bad or anything
related to the topic of licensing/copyright!)

So far so good. Now, you want to build a version of hello.exe that only
depends on OS-supplied runtime without any dependence on "external"
DLLs (eg., Cygwin DLL).

  $ gcc -c -mno-cygwin hello.c
  $ gcc -o hello -mno-cygwin hello.o

  $ ./hello
  Hello world!

To see what DLLs it's using:

  $ objdump -p hello.exe | grep "DLL Name"
        DLL Name: crtdll.dll
        DLL Name: kernel32.dll

You've just created the first non-cygwin application using the Cygwin
development tools without any fuss at all. Both CRTDLL.DLL and
KERNEL32.DLL are part of your OS distribution.

You want to specify "-v" option when compiling and linking to see what
the compiler is really doing. It's noisy, but very instructive! You'll
see how the compiler is passing different libraries to the linker so
that you get the Cygwin runtime library in the default case, and the
Mingw runtime libraries when using -mno-cygwin.

Know thy Tools.

So, how exactly does -mno-cygwin work? To understand that, let's take
a look closer took at the compiler does without and with this option.

  $ gcc -c -H hello.c
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\include\stdio.h
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\include\_ansi.h
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\include\sys/config.h
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\include\stddef.h
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\include\stdarg.h
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\include\sys/reent.h

Here you can see what include files are actually being included, and these
really determine what runtime library you must use to make it all work.
The "runtime" is essentially the set of related header files and the
corresponding libraries; there's one set for Cygwin (the default), and
another for Mingw32 and mixing these two will bring you much grief.

Now for -mno-cygwin case:

  $ gcc -mno-cygwin -c -H hello.c
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\include\mingw32\stdio.h
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\..\..\i586-cygwin32\include\mingw32\stddef.h

Note how the compiler is now picking up the headers from a "mingw32"
directory buried deep within the installation area.

When you link using the -mno-cygwin, the compiler driver (gcc, c++, etc)
pass the right runtime library to the linker and you end up with an
application that does not depend on the Cygwin DLL.

============ Yeah, but what's the problem?

Now, let's build the following trivial C++ program:

  // hello.cc -- hello world example.
  #include <iostream>
  int main () {
      cout << "Hello world!" << endl;
      return 0;
  }

  $ c++ -c hello.cc
  $ c++ -o hello hello.o

This will create hello.exe and you can now run it to test.

  $ ./hello
  Hello world!

Great. Now let's build it for the Mingw target:

  $ c++ -c -mno-cygwin hello.cc
  $ c++ -o hello -mno-cygwin hello.o
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\../libstdc++.a(iostream.o)(.text+0x113):iostream.cc: undefined
  reference to `_ctype_'
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\../libstdc++.a(iostream.o)(.text+0x549):iostream.cc: undefined
  reference to `_ctype_'
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\../libstdc++.a(iostream.o)(.text+0x195d):iostream.cc: undefined
  reference to `_impure_ptr'
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\../libstdc++.a(iostream.o)(.text+0x196b):iostream.cc: undefined
  reference to `_impure_ptr'
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\../libstdc++.a(stdstrbufs.o)(.text+0x32):stdstrbufs.cc: undefined
  reference to `_impure_ptr'
  C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\..\lib\gcc-lib\i586-cygwin32\egcs-2.91.57\..\..\../libstdc++.a(streambuf.o)(.text+0x34c):streambuf.cc: undefined
  reference to `__errno'

  [ ... more errors ... ]

Ouch! What went wrong here? It's such a trivial piece of code! The trouble
here is that Cygwin development tools provide *only* the Mingw32 C runtime
libraries, and nothing else (eg., C++/F77/ObjC runtime libraries, Tcl/Tk
libraries, and a few others folks expect). I suppose Cygnus could provide
all the libraries needed for Mingw linking as well, but we may be asking
a bit too much of them. When we try to link the above code, it's trying
to link to -lstdc++, the C++ runtime library, and it's linking against
the installed one meant for Cygwin application.

There is also a problem with C++ programs that use the C++ iostreams; most
of the iostreams code include _G_config.h, a header file that has certain
system-specific definitions. The Cygwin distributions provides this
header, but it's tailored for Cygwin, not for Mingw. A symptom is that
you'll get undefined references of the type:

  foo.cpp:71: undefined reference to `streambuf::sys_read(char *, long)'
  foo.cpp:71: undefined reference to
    `streambuf::sys_write(char const *, long)'

The _G_config.h determintes the type of the 2nd argument, and it's ``long''
for Cygwin, but for ``int'' for mingw.

What's the solution? Get the Mingw target headers and libraries yourself
and make sure you link against those instead of the installed libraries.
It's really easy, and takes just a few minutes. See "Where to get the
target headers/libraries to create Mingw binaries/DLLs" below on how and
where to get these. Once you have the Mingw target headers and libraries,
do the following:

  - untar the distribution under a directory, say /usr/local/mingw.
    This will create a lib directory containing the target libraries and
    include directory containing target headers (currently the only
    header needed is _G_config.h).
  - Add the -I/usr/local/mingw/include to all compilation when using the
    -mno-cygwin option so that the compiler looks there first.
  - Add the -L/usr/local/mingw/lib to all your link commands when using
    -mno-cygwin option.

and you should be all set provided of course all the libraries are there
that you need.

A similar problem occurs even for the simplest of FORTRAN programs or
any problem that links against the math library (-lm).

============ Other sources of problems.

One particular vexing source of error is when you include a file that
exists for Cygwin, but not for Mingw32; the compilation goes ok, but
the compiler is really using the *WRONG* include file and you get link
time errors.

Let's say you have some code that uses the POSIX/BSD "times" function
which is not part of the ANSI standard and does not exist under Mingw32
runtime.

  #include <stdio.h>
  #include <sys/times.h>
  int main () {
      struct tms time_info;
      times (&time_info);
      printf ("user_time = %d, system_time = %d\n",
              time_info.tms_utime, time_info.tms_stime);
      return 0;
  }

Now build the "times" program:

  $ gcc -c -mno-cygwin times.c
  $ gcc -o times -mno-cygwin times.o
  times.o(.text+0x34):times.c: undefined reference to `times'
  collect2: ld returned 1 exit status

Notice that the compilation goes just fine, but you get an undefined
reference to the "times" function.

What happens is that Cygwin first looks in the mingw32 include directory
the <sys/times.h> file and it can't find it; it then looks at the default
directory and does find it and uses it and everything is fine at this
point. However, at link time, the Mingw32 runtime library lacks this
function and you get an undefined error. Sometimes these are so confusing
that you may get sidetracked and not look at the real source of the
problem -- your own code!

So, how do you diagnose these errors? Whenever you get such errors, use
the '-v' (verbose) and '-H' (show include files) options when compiling
to see where include files are coming from. Then use -v option when
linking to see what libraries are being linked in.

Another source of error is creating Mingw DLLs using dllwrap. The current
version of dllwrap does not know the -mno-cygwin option and will
incorrectly add Cygwin libraries when creating DLLs. The workaround is
quite simple: add the --target=i386-mingw32 option instead. In the future,
dllwrap will simply translate the -mno-cygwin option to the --target
option and it will just work.

  $ dllwrap --target=i386-mingw32 -mno-cygwin [rest of options]

************ Cygwin-b20.1 related problems

Cygwin b20.1 includes mingw includes and startup code that is a bit out
of date with respect to my egcs-1.1.2 mingw32 releases and some of the
fixes did not get into the Cygwin b20.1 release.

One problem that you'll definitely run into is when building C++ code that
uses STL; Mingw headers, as distributed with Cygwin b20.1, includes a file
called alloc.h, which conflicts with STL's alloc.h and causes all sorts of
bizarre compilation errors. The easiest fix is to the following:

a. incorporate the .../i586-cygwin32/include/mingw32/alloc.h into malloc.h
   in the same directory. Just add the stuff in alloc.h to to malloc.h.

b. delete mingw32 alloc.h.

A typical symptom is when any code that uses C++ ``string'' fails to
compile with a parse error in the runtime supplied bastring.h file
(line 65 or so).

These problems will hopefully be fixed in the next Cygwin release.

You can of course always get my latest mingw headers and startup code
from ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/runtime/
and use those.

============ Where to get the "target" headers/libraries to create Mingw
	     binaries/DLLs.

When I release new development tools for Cygwin, I also package up the
Mingw version of the headers and libraries in the same place where you
got the Cygwin package.

The latest version is now EGCS-1.1.1, and you can get the Mingw target
libraries from:

  ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/egcs-1.1.1/egcs-1.1.1-mingw-extra.tar.gz

When newer versions of the compiler is available, replace egcs-1.1.1 with
whatever the current version is.

Get this file, and unpack in a directory, say /usr/local/mingw; when you
compile with -mno-cygwin, add -I/usr/local/mingw/include, and when you
link, add -L/usr/local/mingw/lib with the other options. You can of course
alter the GCC specs file to do this automatically, but be careful when you
do so. Any error in the specs file will render your compiler useless until
you fix the error.

After unpacking the egcs-1.1.1-mingw-extra.tar.gz, you'll have the
following directory hierarchy:

include/
  _G_config.h           -- System-specific definitions for C++ iostreams
lib/
  libm.a                -- The math library (just a stub for Mingw32)
  libstdc++.a           -- C++ runtime library
  libg2c.a              -- FORTRAN (g77) runtime library.
  libobjc.a             -- ObjC runtime library.
  libiberty.a 		-- various BSD'ish routines (random, getopt, etc)


============ THE END

For more information about Cygwin, see Cygnus's cygwin project page:
  http://sourceware.cygnus.com/cygwin/

For more information about Mingw, see my Gnu-Win32 page below and also
look at Colin Peters' web page reachable from mine (cf: "Related Sites").

Latest version of this documentation, and other information related to
GNU tools on various types of windows32 system, is available from my
gnu-win32 page:
  http://www.xraylith.wisc.edu/~khan/software/gnu-win32/

Last Modified: Mon Apr  5 13:16:08 CDT 1999
Mumit Khan <khan@xraylith.wisc.edu>
Code::Blocks缺失C++11/14/17编译选项?手把手教你配置MinGW-w64编译器 在C++开发中,编译器是将源代码转换为可执行程序的核心工具,其版本和配置直接决定了支持的C++语言标准(如C++11、C++14、C++17)。现代C++标准引入了自动类型推导、Lambda表达式、智能指针等关键特性,极大地提升了开发效率和代码安全性。对于使用Code::Blocks这类轻量级IDE的开发者而言,IDE本身不负责编译,其功能菜单(如C++标准选项)是动态读取并展示底层编译器(如GCC、MSVC、Clang)能力的结果。因此,当遇到IDE中缺失现代C++编译选项时,其技术根源通常指向编译器环境 阅读详情

相关推荐

Code::Blocks+MinGW教学环境配置与编译原理实践指南

C语言教学环境的核心需求是轻量、确定、透明——这正是Code::Blocks与MinGW组合不可替代的技术逻辑。作为面向初学者的编程教具,它不隐藏编译四阶段(预处理、编译、汇编、链接),不抽象工具链路径,也不绑架项目结构,使学生能直观理解gcc调用机制、GDB内存调试原理及UTF-8中文编码全流程。其开箱即用的MinGW集成包规避了VS Code等现代IDE在c_cpp_properties.json配置、PATH环境变量、IntelliSense索引等方面的认知过载,真正将学习焦点回归指针、内存布局与函数

weixin_30729609的博客 426

Code::Blocks 20.03 + MinGW 安装后编译报错?手把手教你配置编译器路径(Windows 10/11)

本文详细介绍了在Windows 10/11系统下,解决Code::Blocks 20.03与MinGW安装后编译报错问题的完整方案。从诊断'The compiler's setup (GNU GCC Compiler) is invalid'错误原因,到正确配置编译器路径和环境变量,手把手教你完成设置。同时提供了高级排查方法和最佳实践,帮助C/C++开发者快速搭建稳定的开发环境。

weixin_30776545的博客 315

Windows下MinGW-w64环境配置与C/C++开发实战指南

在C/C++开发中,编译器是将源代码转换为可执行程序的核心工具。GCC(GNU Compiler Collection)作为最著名的开源编译器套件,其跨平台特性使其成为学习标准C/C++和编译开源项目的首选。MinGW(Minimalist GNU for Windows)将GCC工具链移植到Windows平台,使其能够生成原生Windows可执行文件,为开发者提供了接近Linux的开发体验。这一技术方案特别适用于需要在Windows环境下进行跨平台开发、学习标准语言特性或编译如FFmpeg等开源库的场景。

weixin_33895475的博客 456

cygwin 安装 ffplay

1、参考博文http://www.360doc.com/content/12/0719/18/2660674_225285935.shtml中的方法,在编译SDL-1.2源码时出现问题,没有set-gcc-default-*.sh google后在https://github.com/adobe-flash/crossbridge/blob/master/cygwin/bin/set-gcc-d

Nozuowilldie的专栏 1315

Windows C编译器安装指南:MSYS2+MinGW-w64工具链深度解析

C编译器是C语言开发的基础工具,其核心功能是将C源码翻译为可执行的机器指令。在Windows平台,由于缺乏原生POSIX环境和统一的系统路径规范,GCC等类Unix编译器需通过适配层(如MinGW-w64)实现PE格式生成、UCRT运行时链接与头文件路径映射,技术价值在于保障ISO/IEC 9899标准兼容性及跨平台ABI一致性。典型应用场景包括嵌入式上位机开发、开源库Windows移植、CI/CD自动化构建及VS Code深度集成调试。本文聚焦Windows下最稳定生产级方案——MSYS2与MinGW-w

weixin_30315435的博客 395

CodeBlocks安装配置与C++开发环境搭建全攻略

集成开发环境(IDE)是程序员编写、调试和运行代码的核心工具,其原理在于将代码编辑器、编译器、调试器等组件集成于统一界面,通过项目管理与自动化构建提升开发效率。对于C++语言学习与项目开发而言,一个配置简单、运行轻量且功能完备的IDE能显著降低技术门槛,尤其适合初学者快速上手和验证想法。CodeBlocks作为一款免费、开源、跨平台的C/C++ IDE,其核心价值在于提供了开箱即用的轻量级解决方案,有效解决了环境配置复杂、工具链分散等常见痛点。它原生支持GCC、Clang等多种编译器,经典的MinGW-GC

weixin_33722405的博客 515

MinGW-w64 入门实战:Windows 原生 C/C++ 编译环境搭建与工程化配置

MinGW-w64 是 Windows 平台实现 GNU 工具链兼容性的核心编译环境,其本质是通过适配 Windows ABI(而非依赖 MSVCRT)提供轻量、静态可分发、无运行时捆绑的原生二进制构建能力。它支撑跨平台 C++ 库开发、嵌入式工具链、CI/CD 自动化及 AI 编程助手(如 Cursor、Claude Code)生成代码的本地可信编译闭环。技术价值在于命令行全链路可控性、POSIX 兼容性与 UCRT/SEH 异常处理等现代特性。典型应用场景包括 VS Code + CMake 轻量 ID

www.itmmd.com 379

Code::Blocks-20.03:轻量、跨平台C/C++ IDE的配置、调试与实战指南

集成开发环境(IDE)是程序员提升开发效率的核心工具,它通过整合代码编辑、编译、调试等功能,简化了软件开发的复杂性。其工作原理在于提供一个统一的图形化界面,管理项目文件、调用编译器工具链、并与调试器交互。对于C/C++开发而言,一个优秀的IDE能显著降低环境配置门槛,让开发者更专注于代码逻辑本身。Code::Blocks作为一款开源、跨平台的C/C++ IDE,其价值在于提供了高度可配置和模块化的轻量级解决方案,尤其适合教学、嵌入式开发及希望深入理解构建过程的学习者。在实际应用场景中,开发者常面临编译器配置

weixin_33714884的博客 317

我自己的FFMpeg编译之路

转载于:http://blog.youkuaiyun.com/huangxiansheng1980/article/details/5712003 为了编译这个东西,快折腾了一个星期了。期间经历了很多痛苦的过程,今天我把整个过程,以及在这个过程的感悟写下来,以备日后查看,也希望能帮到一些像我一样的兄弟姐妹。   在这一个星期里前前后后加起来总共使用了3中方式编译ffmpeg 1. 在基

feixiaku的专栏 1162

关于Oxford Radar RobotCar Dataset的学习笔记

https://oxford-robotics-institute.github.io/radar-robotcar-dataset/documentation 简介 雷达是 Navtech CTS350-X 调频连续波 (FMCW) 扫描雷达,在所使用的配置中提供 4.38 cm 的距离分辨率和 0.9 度的旋转分辨率,范围高达 163 m,同时提供对天气条件的稳健性这可能会给其他传感器模式带来麻烦。在其他配置中,Navtech CTS350-X 可以提供超过 650 m 的范围和更高的旋转速度。然而,对

禾烁的博客 5295

4、I3C协议详解

I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。 一、简述..

迟子涵925的博客 2万+

ffmpeg编译

为了编译这个东西,快折腾了一个星期了。期间经历了很多痛苦的过程,今天我把整个过程,以及在这个过程的感悟写下来,以备日后查看,也希望能帮到一些像我一样的兄弟姐妹。   在这一个星期里前前后后加起来总共使用了3中方式编译ffmpeg 1. 在基于linux内核的操作系统中编译。这种方式很简单,也很顺利。 2. 在windows下, 采用cygwin编译,这种方法稍微复杂一点。

ustcxjt的专栏 1194

硬核入门!Python爬虫实战:爬取豆瓣读书TOP250,书名+评分+简介,一键生成精美Excel书单(2026避坑版)

通过这个实战,你不仅获得了一份珍贵的豆瓣TOP250书单HTTP请求与响应的本质。HTML解析的核心技巧。反爬虫的基本应对策略。数据清洗与存储的完整流程。爬虫是通往数据世界的一把钥匙。现在,钥匙在你手中,去探索更多有趣的数据吧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 544

FFMpeg编译之路

为了编译这个东西,快折腾了一个星期了。期间经历了很多痛苦的过程,今天我把整个过程,以及在这个过程的感悟写下来,以备日后查看,也希望能帮到一些像我一样的兄弟姐妹。 在这一个星期里前前后后加起来总共使用了3中方式编译ffmpeg 1. 在基于linux内核的操作系统中编译。这种方式很简单,也很顺利。 2. 在windows下, 采用cygwin编译,这种方法稍微复杂一点。 3. 在window...

weixin_30648963的博客 109

SDR 和 DDR 的区别

SDR 和 DDR 的差别,最明显提现在传输速率和频率上。DDR SDRAM与SDRAM的基本结构是相似的,最根本的区别在于DDR 支持在一个时钟周期内传输两次数据,,SDR 只能传输一次数据。

串起点滴 1958

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1324

创建Windows版的Android SDK

创建 Windows Android SDK make: *** [out/host/windows-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] build/core/find-jdk-tools-jar.sh: line 9: [: /cygdrive/c/Program:

Richard的专栏 3675

PX4从放弃到精通(二十七):固定翼姿态控制

固件版本 PX4 1.13.2欢迎交流学习,可加左侧名片。

超维空间科技的博客 6885

Dev-C++ 5.11下载与配置指南:轻量IDE在C/C++教学中的核心价值

集成开发环境(IDE)是程序员编写、编译和调试代码的核心工具,其设计原理在于通过图形化界面整合编辑器、编译器和调试器,降低开发门槛。对于C/C++初学者而言,一个轻量、零配置的IDE能有效帮助建立“编写-编译-运行”的基础认知,其技术价值在于屏蔽环境复杂性,让学习者聚焦于语法和逻辑本身。在高校教学、算法竞赛训练等场景中,这类工具尤为关键。本文围绕**Dev-C++**这一经典轻量IDE,深入解析其**5.11版本**的可靠获取渠道、安全安装步骤及关键配置技巧,并探讨其在现代开发环境中的定位与过渡方案。

chubaisheng8627的博客 741

【基于 CasADi 的欠驱动无人船实时非线性模型预测控制(NMPC)实现与避碰仿真】MATLAB开源复现

本文提出了一种基于CasADi的欠驱动无人船实时非线性模型预测控制(NMPC)方法,实现了轨迹跟踪与避碰功能。研究采用三自由度USV动力学模型,集成静态与动态障碍物避碰约束,并满足国际海上避碰规则(COLREGS)。通过CasADi+IPOPT数值优化求解,实现了毫秒级实时控制。文章详细介绍了USV建模、NMPC控制器设计、避碰约束建模以及CasADi实现流程,包括核心求解流程和轨迹生成方法。实验结果表明,该方法能有效实现复杂环境下的轨迹跟踪与避碰功能。

vor234的博客 1394

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android adb源码分析(1)

ADB是Android debug bridge的缩写,它使用PC机可以通过USB或网络与android设备通讯。adb的源码位于system/core/adb目录下,先来看下编译脚本Android.mk:# Copyright 2005 The Android Open Source Project # # Android.mk for adb # LOCAL_PATH:= $(call my

xgbing 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

CreateProcess 调用Adb 用管道接收结果

android adb源码分析(1)2016年07月28日 21:31:38阅读数:9825ADB是Android debug bridge的缩写,它使用PC机可以通过USB或网络与android设备通讯。adb的源码位于system/core/adb目录下,先来看下编译脚本Android.mk:# Copyright 2005 The Android Open Source Project # ...

wtguo1022的博客 1390

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

adb源码分析

ADB是Android debug bridge的缩写,它使用PC机可以通过USB或网络与android设备通讯。 adb的源码位于system/core/adb目录下,先来看下编译脚本Android.mk: # Copyright 2005 The Android Open Source Project # # Android.mk for adb # LOCAL_PATH:= $

viewsky11的专栏 2121
上一篇: Better Cygwin Terminal
下一篇: VLC多块网卡问题
glcdw
博客等级 码龄18年 8粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值