我是靠谱客的博主 友好画笔,最近开发中收集的这篇文章主要介绍Windows下用VC++命令行编译c(cl.exe),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在用Cython引用c函数时,经常需要将c编译为静态数据连接库(.lib文件)。踩了一些坑现在都记下来。

搞清楚坏境

编译前需要搞清楚自己的编译环境,对于64位需要使用VC 64位命令行提示符。我的环境是:
- Windows 7 64-bit
- Visual studio 2017
所以我使用64位命令提示符。不要用普通的命令行编译,那样很多库和头文件会找不到
我使用的是VC 2017,在开始菜单可以看到VC所提供的命令行提示符。
image

cl.exe

cl.exe是用于在命令行中编译C和C++代码;我安装的是VS 2017,cl 64位版本所在目录为:C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.11.25503binHostX64x64。可以直接在VS命令提示符中使用,vcvarsall.bat已经为我们设置好了环境。

使用下面命令将sample.c文件编译为DLL,动态链接库。

cl /LD sampleD.c

编译结果:
image
会获得以下文件:
- sample.dll
- sample.obj

通过/out可以指定输出文件名

cl /LD sampleD.c /out:test.dll

将会得到 test.dll文件。
cl还有很多的参数,详细参数可以参考官方文档:
cl.exe 参数

lib.exe编译静态库

如果需要静态链接库,可以使用lib.exe进行编译,命令格式为:

LIB.EXE FILE1.OBJ FILE2.OBJ /OUT:MYLIB.LIB

下面将cl命令产生的sample.obj,生成为静态连接库:

lib sample.obj /out:sample.lib

问题检索

error LNK2019: unresolved external symbol

出现link 2019,可能原因:
1. 使用了本机位数不一样的命令提示符,例如本机为64位,但是使用了32位;导致你使用的库也是32位。
2. 使用的库版本与编译的环境不一致。举个栗子,现在我使用32位的python编译python扩展函数,但是我使用了64位的命令提示符,那么也会出现这个问题。

最后

以上就是友好画笔为你收集整理的Windows下用VC++命令行编译c(cl.exe)的全部内容,希望文章能够帮你解决Windows下用VC++命令行编译c(cl.exe)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部