问题标签 [djgpp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 将内核项目从 DJGPP 移植到 MinGW
尝试使用 MinGW 和 NASM(以前的 DJGPP 和 NASM)编译 C++ 内核项目。实际上也尝试过 Cygwin,结果完全相同:
- 首先,刚刚换
\DJGPP\bin
了\MinGW\bin
. 收到以下链接错误:target coff-go32 not found.
- 将目标交换为
elf32-i386
,并得到了cannot perform PE operations on non PE output file 'build/kernel.elf'
这是一个奇怪的错误,因为据我所知,我没有做任何“PE 操作”。 - 再次将目标更改为
pe-i386
,出现新错误build/Common.o:Common.cc:(.text+0x2a): undefined reference to 'atexit'
似乎 MinGW 正在生成atexit
对静态类的调用。DJGPP 没有。内核在关机期间进行自己的 DTOR 处理。我知道定义atexit
会“解决”这个问题,但在这一点上这更像是一种破解,而不是一个长期的解决方案。我宁愿让 MinGW 编译现有代码而无需任何(或最少)修改。
坦率地说,我对 Windows 构建环境并不熟悉,并且可以使用任何提示来做什么。该项目(减去上面列出的更改)在 DJGPP 下可以正常编译和启动。区别似乎在于 DJGGP 和 MinGW 处理编译时类声明的方式?
编辑:最后崩溃并在 Cygwin 上构建了一个交叉编译器。现在都在工作。
compiler-construction - 当我尝试与 LD 链接时,MinGW for Windows 不起作用
我现在正在用 C 语言开发一个测试操作系统……我一直在寻找http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial以开始使用。我得到了适用于 Windows 7(64 位)的 MinGW。我设置了教程中的链接器脚本和一个批处理文件,以使用 NASM、GCC 和 LD 自动构建。当它尝试将 .o 文件与 LD 链接时,我收到此消息“ld:无法对非 PE 输出文件执行 PE 操作”。为什么会这样?
此外,我使用 MinGW 而不是 DJGPP(它在编译器下的第二页上说)的原因是因为我找不到适用于 Windows 64 位的下载。我收到一条消息说 16 位应用程序与我的 Windows 版本不兼容。
如果有人可以提供帮助...我将不胜感激!:)
sqlite - 使用 djgpp 在 dos 上编译 sqlite3
我想在 DOS 上编译 Sqlite 最新版本。当我尝试时,我能够制作 libsqlite3.a 为了使其工作,我使用了 fchown-stub.c 但是当我尝试将它链接到 shell.o 以制作 exe 时,它给了我错误 mmap undefined 和 munmap undefined。它们都在 sys/stat.h 中定义,我认为 mmap 和 munmap 是 linux 特有的,没有 equ。在dos。在将 unix 移植到 dos 时,许多程序员应该面临同样的问题。请告诉我,如何解决这个问题。感谢您。
dos - djgpp编译的harbor exe不能在纯dos中运行
我使用 haarbour 编译器编译了一个 Clipper 程序,生成的 c 文件使用 djgpp 编译以生成最终的 exe。此 exe 在 Windows 98 的控制台窗口中运行良好。但是,当我退出到 msdos 提示符或尝试在纯 dos 中运行时,它不会给出任何错误。但没有走得更远。但是 num lock 和 cap locks 响应正确。当我按 ctrl+al+del 时,它会给我消息 hdpmi 被用户终止。我已经尝试过 cwsdpmi 而不是 Hdpmi32 但问题仍然存在。在 exe HBRUN.exe 上,它充当生成的 .hrb 文件的解释器,而不是独立的 exe。当我以纯方式运行 HBRUn 时,它的行为方式相同。但是当我运行另一个没有 dbf 文件的目录时,它给了我错误 dbf file not found !这在控制台窗口中也可以正常工作,但为纯 DOS 编译。我认为使用harbor和djgpp生成的所有exe都存在一些问题,如果它们很大的话。一个简单的 5-6 行程序的 .hrb 文件由 hbrun 在纯 dos 中正确运行(hbrun 的大小约为 1700 K,而我的 exe 文件大小为 950 K 有人可以遮光吗?
dos - 使用 djgpp 对 dlopen 的未定义引用
当我尝试使用 djgpp 编译 sqlite3 时,它给出了错误未定义的 dlopen 引用、未定义的 dlclose 引用、未定义的 dlsym 引用等。在 Linux 上,如果我们使用 -ldl,问题就解决了。但是 djgpp 中没有可用的 dl.a。那么如何解决这个问题呢?
c - 使用 fscanf 读取两行整数
我想问一些我用 C 写的东西。
我使用该fopen()
命令打开并读取一个仅包含两行的文本文件。第一行是一个整数 N,第二行是第一行所说的 N 个整数。
例如。
但我想在文件打开时采取限制。
数字N
应该在 之间1 ≤ Ν ≤ 1.000.000
。如果没有,则显示错误消息。如果文件正常,则程序继续使用另一个代码运行。
这是我到目前为止所做的:
……
但问题是限制只检查第一行号,虽然它是正确的,但不要读取第二行中的数字。
我的意思是:假设我10
在第一行有数字。代码将分析数字,检查限制,然后进入“其他”部分
..它会说一切正常。但是如果我20
在第二行有数字怎么办?- 当我只需要10
例如。
所以我希望尽可能地被清除。我的问题是我需要程序中的代码,除了第一个限制之外,在第一个限制下还有另一个限制,它将读取带有数字的 txt 文件的第二行并检查是否有与第一个一样多的数字线说!
我怎么做?如果你们想要任何其他声明,请随时询问!希望我清楚我的问题:)
c - DOS 中的非交互式驱动器列表
我正在尝试使用 DJGPP C 编译器从 DOS 中的 C 程序(我不是指 Windows 命令提示符,我指的是实际的 DOS 6.0)中获取所有可用驱动器的列表。
我找不到直接执行此操作的 API,所以我只是循环通过驱动器 A 到 Z 并尝试测试它们是否在那里。我尝试使用opendir
,access
和进行此测试statfs
,但在所有 3 中我都收到如下消息:
有什么方法可以确定我是否可以完全非交互地从驱动器中读取?如果存在没有加载磁盘的驱动器,我只想能够表现得好像该驱动器不存在并继续。
c - 需要用于 Windows 7 64 位的 C 编译器,以编译为 DOS 目标
我正在尝试找到一种解决方案,允许我从 Windows 7 64 位将 C 代码编译为 DOS 可执行文件。我最近从 XP 32 位更新到 Win7 64 位,现在我的 Borland C++ 5.0 编译器无法工作。当它尝试调用 tlink.exe 16 位时出现错误。我试图避免使用另一台装有 XP 的计算机,但如果我不能很快解决其他问题,那将是我的行动方针。
我的目标是运行 FreeDOS 的嵌入式 x86。尽管我很想过渡到 Linux,但我负担不起过渡所需的时间。除了从未使用过 Linux 的学习曲线之外,我的大部分代码都依赖于 DOS,并且必须重新编写。
我希望有一个我可以改变的窗口设置,但到目前为止我的研究让我相信我需要对我的过程进行更彻底的改变。我已经在 Turbo C 2.01、DJGPP、DOSbox 中四处寻找……如果没有外部输入,我不太有信心沿着这些小巷走下去
c - 在 DJGPP C 中使用 system() 打开通用文件
我在这里遗漏了一些明显的东西。我正在使用 DJGPP C 编译器。我可以成功打开可执行文件,但不能打开其默认程序中的文件。
运行此代码会导致计算器启动。关闭计算器后,它会报告:
所以其他两个系统调用存在问题。我尝试将“START”添加到系统调用中,但这并不能解决问题。刚刚搜索了我的 Windows 7 Pro 系统,它没有 START.EXE。添加“cmd.exe”只是启动cmd,所以就好像没有发送任何参数一样。
我可以正常在cmd中输入“C:\TextFile.txt”,它会打开notepad.exe,里面有TextFile.txt。
理想情况下,无论如何我都会使用比 system() 更安全的东西来执行此操作,但我还没有在 DJGPP 中看到任何 ShellExecute 示例。
c - 在 DOS 中使用 djgpp 等待——忙等待的替代方案?
我最近写了一个小诅咒游戏,因为它所需要的只是一些计时器机制和一个诅咒实现,尝试为 DOS 构建它的想法很自然。诅咒是由pdcurses
DOS 提供的。
POSIX和Win32的时序已经不同了,所以我定义了这个接口:
游戏调用ticker_init()
andticker_done()
一次,ticker_start()
在它需要滴答声时以毫秒为间隔,并ticker_wait()
在其主循环中等待下一个滴答声。
在 DOS 上使用与 POSIX 平台相同的实现, usingsetitimer()
不起作用。一个原因是 djgpp 附带的 C lib 没有实现waitsig()
. 所以我为 DOS 创建了一个新的接口实现:
这就像一个魅力dosbox
(我现在没有真正的 DOS 系统)。但我担心的是:忙着等待真的是我在这个平台上能做的最好的事情吗?我想要一个解决方案,让 CPU 至少可以节省一些能源。
作为参考,这里是整个来源。