首页 > 解决方案 > 如何将旧的 Visual c++ 代码 (vc++ 6.0) 转换为 Visual Studio 2019,缺少 libc

问题描述

我有一些作为 CLI 应用程序运行并使用 nmake 文件构建的旧 Visual C++ (v 6.0) 代码,我想将其转换为我可以在 Visual Studio 2019 中构建的东西(在不在 IDE 下的 shell 窗口中)。它使用我类似构建的库。我的 makefile 将包含在底部。

我发现 c:\program files (x86)\microsoft visual studio 14.0\common7\tools\vsvars32.bat 并且可以根据需要运行 nmake(我有一个 .bat 文件,它构建了大约 30 个这些程序作为工具及其库的一种测试库,我在 Emacs 中运行它并将输出与上一个进行比较我运行它的时间,预计唯一的区别是日期时间戳、编译器版本等。)

但是,当我进入链接阶段时,出现错误 LINK : fatal error LNK1104: cannot open file 'LIBC.lib'

我查看了相关的 lib 目录,发现了很多 libcxxx.lib 的变体,但没有普通的 libc.lib。我不知道问题是我传递给 CL 的命令行参数还是其他东西。因此,这个问题。

# makefile for prog (a hello world type example)
DEFINES=
INCLUDES= -I. -I.\inc.vc -I\yxx\inc.vc -I\yxx\lib.vc
CXXFLAGS= /c /Od /W3 /Za $(DEFINES) $(INCLUDES)
CXX=cl

OBJECTS=yy_main.obj \
    yy_mylex.obj \
    yy_mypsr.obj

yy_main.obj: \yxx\lib.vc\yy_main.cpp yy_mypsr.h yy_err.tbl yy_syna.tbl
    echo $(CXXFLAGS) >$*.OPT
    $(CXX) /Fo$@ @$*.OPT \yxx\lib.vc\$*.CPP >$*.ERR
    TYPE $*.ERR

yy_mylex.obj: yy_mylex.cpp yy_mylex.h
    echo $(CXXFLAGS) >$*.OPT
    $(CXX) /Fo$@ @$*.OPT $*.CPP >$*.ERR
    TYPE $*.ERR

yy_mypsr.obj: yy_mypsr.cpp
    echo $(CXXFLAGS) >$*.OPT
    $(CXX) /Fo$@ @$*.OPT $*.CPP >$*.ERR
    TYPE $*.ERR

prog.exe: $(OBJECTS) \yxx\lib.vc\yy_lol.lib
    CL @<<
$(OBJECTS)
\yxx\lib.vc\yy_lol.lib
/link /out:prog.exe
<<


# makefile for yy_lol.lib (lists of object files pruned to be smaller)
DEFINES= -Dyy_assert_disable_
INCLUDES= -I. -I\yxx\inc.vc -I\yxx\lib.vc
ARFLAGS=
CXXFLAGS= /c /Od /W3 /Za $(DEFINES) $(INCLUDES)
CXX=cl
AR=LIB
RM=del

OBJECTS=\yxx\lib.vc\yy_asrt.obj \
    \yxx\lib.vc\yy_ast.obj \
    \yxx\lib.vc\yy_bktrk.obj \
    \yxx\lib.vc\yy_buf.obj \
    \yxx\lib.vc\yy_sym.obj

.cpp.obj:
    echo $(CXXFLAGS) >$*.OPT
    $(CXX) /Fo$@ @$*.OPT $*.CPP >$*.ERR
    TYPE $*.ERR

yy_lol.lib: $(OBJECTS)
    -$(RM) $@
    -$(AR) /out:$@ $(ARFLAGS) \yxx\lib.vc\yy_asrt.obj
    -$(AR) $@ $(ARFLAGS) \yxx\lib.vc\yy_ast.obj
    -$(AR) $@ $(ARFLAGS) \yxx\lib.vc\yy_bktrk.obj
    -$(AR) $@ $(ARFLAGS) \yxx\lib.vc\yy_buf.obj
    -$(AR) $@ $(ARFLAGS) \yxx\lib.vc\yy_sym.obj

标签: windowsvisual-studiovisual-c++command-line-interfacevisual-studio-2019

解决方案


正如您所注意到的,没有这样的 libc:它取决于您正在使用的链接模型

  • 单线程(从 VS10 开始不存在)
  • 单线程调试(从 VS10 开始不存在)
  • 多线程
  • 多线程调试
  • 多线程DLL
  • 多线程调试 DLL

它会根据您使用的模型选择不同的 libc。猜测 libc 来自不再存在的单线程模型(非调试)。

对于相同的功能,请尝试使用 libcmt.lib - 多线程非调试版本。


推荐阅读