zoukankan      html  css  js  c++  java
  • VC6.0静态编译注意事项

    选择静态编译(工程->常规->Microsoft基础类->使用MFC作为静态链接库)的时候,会报错:MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in LIBCMTD.lib(sprintf.obj)报错的意思及原因是使用的某些外部静态库编译时使用的标准库和当前工程使用的标准库冲突。

     

    所以需要设置标准库并忽略一些库:

    首先需要设置run-time library

    工程->设置->C++->Code Generation->Use run-time library

    可供选择的Use run-time library有6项:Single-threaded、Multithreaded、Multithreaded using DLL、Debug Single-threaded、Debug Multithreaded、Debug Multithreaded using DLL。

    不同的Use run-time library对应地忽略不同的库文件。对应关系如下:

     

    Single-threaded (libc.lib)单线程静态链接库(release版本)

    libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

    Multithreaded (libcmt.lib)多线程静态链接库(release版本)

    libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

    Multithreaded using DLL (msvcrt.lib)多线程动态链接库(release版本)

    libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib

    Debug Single-threaded (libcd.lib)单线程静态链接库(debug版本)

    libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib

    Debug Multithreaded (libcmtd.lib)多线程静态链接库(debug版本)

    libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib

    Debug Multithreaded using DLL (msvcrtd.lib)多线程动态链接库(debug版本)

    libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

    如何忽略呢?

    工程->设置->连接->输入->忽略库->即可。

    不同的编译方式有什么差异呢?

    单线程: 不需要多线程调用时, 多用在DOS环境下
    多线程: 可以并发运行
    静态库: 直接将库与程序Link, 可以脱离MFC库运行
    动态库: 需要相应的DLL动态库, 程序才能运行
    release版本: 正式发布时使用
    debug版本: 调试阶段使用

    对应地忽略这些库之后,会产生一个新的问题:

    nafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv

    nafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc
    nafxcwd.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype
    nafxcwd.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype
    nafxcwd.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype

    这个问题如何解决呢?

    工程->设置->C/C++->预处理器->预处理器定义 _AFXDLL。

    问题就解决了。

  • 相关阅读:
    三道趣味题目
    iOS开发中使用静态库 .a 文件
    java Graphics2D 画图
    堆和栈的区别
    iOS开发中KVC、KVO简介
    GPUImage的简单使用
    OC中 self.view.frame.size.height = 100; 不能通过编译的原因
    Xcode7 低版本iOS系统上下有黑边的问题
    c语言数组赋值
    ELF interpreter /libexec/ld-elf32.so.1 not found
  • 原文地址:https://www.cnblogs.com/xuxinstyle/p/9128894.html
Copyright © 2011-2022 走看看