【问题标题】:Going on with no msvcrt.dll继续没有 msvcrt.dll
【发布时间】:2015-02-11 15:36:10
【问题描述】:

当我在 mingw 中编译空 main 时,我得到 27kb exe 和 1000 行反汇编, 生成的 exe 引用 kernel32.dll 和 msvcrt.dll

找到了一些我可以放“-nostdlib -Wl,--exclude-libs,msvcrt.a”的地方 options 现在生成的 exe 是 3kb 并且有大约 10 行汇编

很好,类似依赖walker的东西也不会引用任何东西

我想继续使用第二种形式(剥离 msvcrt.dll 引用) 但能够链接到 win32.dll-s 以制作 winapi prog(但没有 c-lib 和其他东西)

当我抛出 msvcrt.dll 时,现在如何链接到 winapi dll?需要我添加 一些用于 winapi dll 的导入库还是什么?

【问题讨论】:

    标签: c++ c winapi gcc mingw


    【解决方案1】:

    您可以在链接命令行中添加您需要的库:

    gcc -c somefile.c
    gcc -o someprogram somefile.o -nostdlib -luser32 -lshlwapi
    

    您可能还想使用-static-libgcc 静态链接 libgcc,以防止 libgcc DLL 拉入 msvcrt.dll。

    【讨论】:

    • 你知道哪一个是最常见的winapi,比如消息框和其他基本的东西吗?
    • ps 看起来不错,很好,tnx
    • @user2214913 我只知道kernel32user32,但这真的取决于你调用的函数。我建议只在 msdn 上搜索功能文档,例如[´MessageBox](http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505.aspx) function shows (near the bottom) that you need the user32` 库的那个。它还会告诉您每个函数需要包含的正确标题。
    • @user:一切正常,直到停止工作。如果没有 CRT,您将无法处理 C (SEH) 或 C++ 异常。您也没有正确初始化的浮点环境或正确初始化的静态数据。也不支持 64 位整数。这个名单无限期地继续下去。
    • @IInspectable 是缺少 SEH 的一些问题,它会如何呈现给我?这有多严重?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2019-07-31
    • 2014-06-05
    • 2011-12-26
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多