繁体   English   中英

如何将旧的 Visual C++ 代码 (vc++ 6.0) 转换为 Visual Studio 2019,缺少 libc

[英]how to convert old visual c++ code (vc++ 6.0) to visual studio 2019, libc missing

我有一些旧的 Visual C++ (v 6.0) 代码,它们作为 CLI 应用程序运行并使用 nmake 文件构建,我想将其转换为我可以在 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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM