nmake编译生成目标文件后还有error信息

网是开源的c/c++日志库也不少,但用起来总觉得不方便,于是动手写了一个C++日志框架Log4K。

测试代码:

#include "log4k.h"

#pragma comment(lib, "log4k.lib")

static int g_Cnt = 0;
void LogTestThread1(LPVOID lpPara)
{
    DEBUG_FUNCTION();

    LOGFMTT(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTI(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTE(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);

    for (int i = 0; i < 10;)
    {
        LOGFMTT(L"[%d] %s", i++, __FUNCTIONW__);
        //Sleep(10);
    }
}

void LogTestThread2(LPVOID lpPara)
{
    DEBUG_FUNCTION();

    LOGFMTT_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
    LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTI_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
    LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTE_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);

    for (int i = 0; i < 10;)
    {
        LOGFMTI(L"[%d] %s", i++, __FUNCTIONW__);
        //Sleep(10);
    }
}

int main()
{
    DEBUG_FUNCTION();

    LOG4K_SET_OUT(Kevin55::OUT_TO_STDOUT_AND_LOG);
    LOGFMTT(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTI(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTE(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);

    LOGFMTT_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
    LOGFMTD_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
    LOGFMTI_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
    LOGFMTW_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);
    LOGFMTE_A("----------Function:%s, Line:%d", __FUNCTION__, __LINE__);

    HANDLE hThread[2];
    ZeroMemory(hThread, sizeof(HANDLE) * 2);

    hThread[0] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LogTestThread1, NULL, 0, NULL);
    hThread[1] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LogTestThread2, NULL, 0, NULL);

    for (int i = 0; i < 100; i++)
    {
        LOGFMTD(L"[%d]======%s", i, __FUNCTIONW__);
    }

    WaitForMultipleObjects(2, hThread, true, INFINITE);
    //LOG4K_SET_OUT(OUT_TO_STDOUT);

    LOGFMTT(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTD(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTI(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTW(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);
    LOGFMTE(L"----------Function:%s, Line:%d", __FUNCTIONW__, __LINE__);

    return 0;
}

使用nmake编译及链接完成后,还有error信息,下面是所有nmake输出:

    cl /c /Zi /W3 /WX- /sdl /O2 /Oi /Oy- /GL /D WIN32 /D NDEBUG /D _CONSOLE /D _LIB /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope   /FoD:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4K.obj /FdD:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\vc120.pdb /Gd /TP /analyze- /errorReport:prompt D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\Log4K.cpp
Log4K.cpp
    link /ERRORREPORT:PROMPT /OUT:D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4K.exe /INCREMENTAL /NOLOGO /LIBPATH:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib";"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib" kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /DEBUG /PDB:D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4K.pdp /LTCG /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /IMPLIB:D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\Log4Z.lib /MACHINE:X86 D:\code\CPP_Code\KernalMainApp\Log4Z\Log4Z\out\log4k.obj
LINK : warning LNK4075: ignoring ‘/INCREMENTAL‘ due to ‘/LTCG‘ specification
Generating code
Finished generating code
    cl  Log4K.cpp
Log4K.cpp
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE\xlocale(337) : warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
Log4K.cpp(427) : error C2664: ‘BOOL SetConsoleTitleA(LPCSTR)‘ : cannot convert argument 1 from ‘const wchar_t [14]‘ to ‘LPCSTR‘
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Log4K.cpp(513) : error C2664: ‘DWORD GetModuleFileNameA(HMODULE,LPSTR,DWORD)‘ : cannot convert argument 2 from ‘wchar_t [128]‘ to ‘LPSTR‘
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

网上好像有人提交过类似的问题:https://connect.microsoft.com/VisualStudio/feedback/details/808657/vs2013-compiler-fails-on-function-templates-with-c-11-alternate-declaration-syntax,这个问题可能是编译器的一个bug。

时间: 2024-11-12 00:45:53

nmake编译生成目标文件后还有error信息的相关文章

很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>

使用readelf和objdump解析目标文件 ***

引言 本文是对程序员的自我修养:链接.装载与库中第3章的实践总结(和结构相关的示意图都是用Gliffy Diagrams画的??),通过使用工具readelf.objdump对目标文件进行解析,学习目标文件的结构. 1. 目标文件 1.1 目标文件的定义 编译器编译源代码后生成的文件叫做目标文件.在Linux下,使用gcc -c xxxx.c编译生成.o文件. gcc -c xxxx.c编译生成目标文件 1.2 编译过程回顾 编译过程 目标文件的文件类型为ELF,在Linux下对应文件后缀为.o

LINUX下目标文件的BSS段、数据段、代码段

http://blog.chinaunix.net/uid-27018250-id-3867588.html bss 未初始化的全局数据 data 已经初始化的全局数据 text 代码段,机器指令 rodata 字符串常量 参考:<程序员自我修养> 代码编译后的机器指令经常被放在代码段里,代码段名为".text";已初始化的全局变量和已初始化的局部静态变量经常放在数据段里,数据段名为".data";未初始化的全局变量和未初始化局部静态变量一般放在“.bs

明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示

#include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typedef struct { char name[20]; int height; float weight; } student; void swap(student *x,student *y) { student tmp = *x; *x = *y; *y = tmp; } void sort(student

执行目标文件引发的问题:syntax error: word unexpected (expe...

今天不小心把一个目标文件当成了可执行文件放到开发板上进行执行,结果出现了这样一个问题:./hello_qt: line 1: syntax error: word unexpected (expecting ")"),因为以前没有碰到过这事,一时间有点蒙,就是一个简单的hello world按道理不会有问题才对.于是google了一下,原来是一个小小的-c编译选项搞得鬼.顺带也扩展学习总结了一下. arm和pc上执行目标文件的区别 一般来说,gcc -c选项编译出来的目标文件是不可执行

程序员的自我修养:(1)目标文件

程序员的自我修养:(1)目标文件 1.目标文件 1.1 编译与链接 在使用像Visual Studio或Qt Creator等IDE时,通常有一个叫做"构建"的按钮.当编辑完成要运行和测试时点一下它,程序就能跑起来了,所以我们很少关心编译和链接.其实,编译和链接合并在一起就称为 构建(Build).简单的一次按键,实际背后却是异常复杂的过程: 预编译(Preprocessing) 编译(Compilation) 扫描:算法类似有限状态机(FSM),将字符转换成Token. 语法分析:分

在Unix系统上,从源文件、目标文件、可执行文件的编译过程

是由“编译器驱动”(compiler driver)完成的: unix> gcc -o hello hello.c 在这里,gcc的编译器驱动程序读取源文件hello.c, [cpp] view plaincopy #include <stdio.h> int main() { printf("hello, world/n"); return 0; } 并把它翻译成一个可执行目标文件hello,这个过程是分为四个阶段完成的.如下图所示,执行这四个阶段的程序(预处理器.

目标文件里的秘密

目标文件内包含指令代码.数据和链接环节所需要的一些信息,如符号表.调试信息.字符串表等.一般目标文件将这些信息按不同的属性分类,以"段"的形式存储.本文将在Linux环境下,用bjdump.readelf工具查看目标文件存储的具体形式,可得目标文件中由C语言编译后执行语句放在.text段,已经初始化的全局变量和和局部静态变量放在.data段,未初始化的全局变量和局部静态变量放在.bss段,ELF文件中各个段的基本属性放在.symtab段,段表中很重要的还有重定位表以及ELF文件头. 详

oracle恢复案例:rename一个数据文件后做不完全恢复

案例:rename一个数据文件后做不完全恢复 SQL>startup mount:   //启动到mount状态 SQL> show parameter control_files    //查看控制文件的位置信息 NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ contro