当前位置:C++技术网 > 资讯 > VS2017的Linux项目编译和链接的相关说明

VS2017的Linux项目编译和链接的相关说明

更新时间:2017-11-09 09:56:41浏览次数:1+次

    本来觉得这个事比较简单,就懒得写的。然后在项目中却遇到了这个问题,找了半天才解决。然后不久,群里的群友也问了同样的问题。可能是大家对VS2017不熟悉吧。另外,VS2017写Linux项目更是不熟悉。所以还是写一下。
    VS2017的项目设置和之前的VS版本基本上是一致的。主要是VS2017加入Linux项目支持,然后Linux有些特性,大家不熟悉,有些坑需要踩。
    Linux编译和链接的报错,和Windows不一样,所以习惯了Windows的同学,可能对于Linux的报错还是很陌生,以至于不知道是什么问题。下面来看看。
'variable' undeclared :变量未定义,同Windows的未定义的标识符
undefined reference:未定义的引用,同Windows的未定义的标识符。即只有头文件,却没有链接对应的库。
cannot find -lxxx  collect2: ld returned 1 exit status  :找不到库。

    以上是几个最常见的错误。
    对于编译,在VS2017中,Linux和Windows基本上一样,都自动处理的。只是链接的话,需要设置链接库什么的。所以这里就说说。
    链接的话,如果动态库不在系统的库目录里,我们需要额外指定库的目录。这时在VS2017的项目属性的“附加库目录”添加一下库目录。如果只是添加一个库的路径,直接写一个路径即可。如果是多个库,也就有多个路径,那么此时的多个路径需要使用英文分号相隔,或者使用右侧的编辑进行添加,一行添加一个。在这个地方,我踩过坑。然后把两个库加在一行,用空格隔开,然后死活链接不成功。后来发现要用分号隔开。如下图所示:
    VS2017的Linux项目编译和链接的相关说明
    确定了库的路径之后,然后就是填写链接的库名了。对于Linux来讲,库的名字是libXXX.a和libXXX.so,前者是静态库,后者是动态库。在填写链接的库名的时候,lib、.a和.so都是不要的,只留中间的XXX部分,否则识别不了库的。这点也是需要不熟悉Linux的同学注意了。
    填写链接库的名称,多个之间也是要用分号相隔。在“链接器”->“输入”->“库依赖项”中填写,如下图所示:
    VS2017的Linux项目编译和链接的相关说明
    这样在VS2017就可以正常的连接各种链接库了。不过还有一个问题,那就是,你不知道链接库在Linux的什么位置。那么我们就来搜索一下这个库所在的位置。
    在Linux终端上输入下面的命令:
find / -name libXXX.so     
    最后面是库的文件名,需要带上lib和后缀。我搜了一下mysql的数据库的动态库的位置,如下图所示:
    VS2017的Linux项目编译和链接的相关说明
    其他库也就是名称不一样,就不演示了。当然,你的代码需要使用正确版本的动态库,不要瞎用。你使用的工具库的链接库是什么,可以网上查得到的。不要自己去库目录里面找,然后看什么像就去链接。往往是很多时候,你看起来觉得不像的才是真正要链接的库。所以,记住,不要自作聪明哈。
    写了这些,我相信,VS2017编译和链接也就没有太多问题了。