zoukankan      html  css  js  c++  java
  • VC环境下LIB引用问题(LNK1104) [转]

    模拟描述情况

    1、项目概要
    项目A是一个静态库项目,Mtd运行库
    项目B是一个MFC应用项目,MTD运行库

    有一个关于XML操作的LIB,也采用MTD运行库。这是一个已知的LIB

    存放在A项目的CommonLib目录下,即:
    A\CommonLib\Xml.Lib

    2、项目关系
    A项目引用了XML的静态库,其附加库命令如下:
    #pragma comment( lib, ".\\CommonLib\\xml.lib" )

    A项目最终要被B项目引用,那么手工拷贝此Lib
    其对应生成文件保存在:A\Debug\A.Lib
    拷贝到B项目去,目录:B\CommonLib\A.Lib

    B项目引用A项目的,其附加库命令如下:
    #pragma comment( lib, ".\\CommonLib\\A.lib" )

    B项目同时又要使用XML的静态库,其附加库命令如下:
    #pragma comment( lib, "..\\A\\CommonLib\\Xml.lib" )

    3、说明下LIB最终的保存路径
    A项目下:
    A\CommonLib下:
    Xml.lib
    A\Debug下:
    A.lib

    B\CommonLib下:
    A.lib

    4、问题出来了
    编译A项目,能成功生成A.LIB。拷贝到B项目的CommonLib目录。----这是对的。
    编译B项目,却出现 LNK1104错误,一直报“.\CommonLib\Xml.lib”不能打开。(我一直引用的A项目下CommonLib的xml.lib,没有引用 B项目的CommonLib下的xml.lib。附加命令也是#pragma comment( lib, "..\\A\\CommonLib\\Xml.lib" ))

    我的解决方法是把Xml.lib再拷贝一个到B的CommonLib去。

    但我不知道出现lin1104的原因。谁能解释下为什么找到.\Commonlib\xml.lib??

    5、另类测试链接器:
    新建一个目录CommonLib,用来共享lib给不同的项目。与A项目目录平级。
    把两个项目共用的xml.lib拷贝到此目录下。

    同时修改
    #pragma comment( lib, "..\\A\\CommonLib\\Xml.lib" )

    #pragma comment( lib, ".\\CommonLib\\Xml.lib" )

    修改为:
    #pragma comment( lib, "..\\CommonLib\\Xml.lib" )

    删除以前A\B下的CommonLib下的xml.lib。

    分别编译。发现一切都正常了。

    总结:
    导致在B项目编译出现lnk1104错误,估计错误来源于A项目生成的LIB包含了#pragma comment( lib, ".\\CommonLib\\Xml.lib" ),导致项目B编译再次找寻此LIB。

    在N个项目共享编译一个已知的lib,需要放在相对路径一致的地方。

    备注:
    不知分析的这类LNK1104问题是否是此缘故导致。

    敬请各位指点。

    [转] http://www.cnblogs.com/GoGoagg/archive/2009/03/19/1416505.html

  • 相关阅读:
    Linux的常用用法
    docker入门实践01
    airflow安装rest api插件发现airflow webserver服务不能启动的解决办法
    27.Spark中transformation的介绍
    1.Cloudera Manager安装
    win10系统不能ping通vmware虚假机解决办法
    在airflow的BashOperator中执行docker容器中的脚本容易忽略的问题
    AirFlow后台运行调度程序
    Airflow怎么删除系统自带的DAG任务
    airflow删除dag不在页面显示
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2450163.html
Copyright © 2011-2022 走看看