gcc -O2 优化,到底做了什么? 程序都不能正常运行了。

Posted personnel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc -O2 优化,到底做了什么? 程序都不能正常运行了。相关的知识,希望对你有一定的参考价值。

一个项目开发到维护有五年时间了。

今天在项目中加入了一段代码后,软件启动后,窗口显示不出来了。

加入的代码:

HMODULE hDll_kernel32 = LoadLibrary("kernel32.dll"); // 加载 kernel32.dll
    if(hDll_kernel32)
    {

        FARPROC proc = GetProcAddress(hDll_kernel32, "SetDllDirectoryA"); //导出 DLL 库函数地址
        if(proc)
        {
            //printf("在 kernel32.dll 找到 SetDllDirectoryA() 
");

            typedef BOOL (*func_SetDllDirectoryA)(LPCSTR);

            func_SetDllDirectoryA _SetDllDirectoryA = (func_SetDllDirectoryA)proc;  //函数指针

            int status = _SetDllDirectoryA(app_folder_path); //将目录添加到用于查找应用程序DLL的搜索路径
            printf("_SetDllDirectoryA()->status:%d
", status);
        }

        FreeLibrary(hDll_kernel32); //释放
        hDll_kernel32 = NULL;
    }

取消 -O2 选项后,就可以正常启动软件。

这段代码有毒?

技术图片

 

以上是关于gcc -O2 优化,到底做了什么? 程序都不能正常运行了。的主要内容,如果未能解决你的问题,请参考以下文章

gcc的ffast-math实际上做了什么?

硬核文章:编译器都做了哪些优化?

别搞错了,nonTransitiveRClass 不能解决资源冲突!

别搞错了,nonTransitiveRClass 不能解决资源冲突!

2018再见,2019你好~

gcc 编译使用动态链接库和静态链接库