none
链接时找不到函数的定义,为什么linker查找的函数名和lib中函数名存在一个前置下划线的差别? RRS feed

  • 问题

  • 大家好!

    情形: 使用一个动态链接库,工程中已经包含了头文件,属性中也进行了相应的路径和文件包含设置。但编译时出现错误:

    LINKERR: _FinitCamera 找不到,在OnInitialDlg中调用。

    原因:使用notepad打开那个lib文件,文件中有FinitCamera这个函数。但是链接器怎么去找_FinitCamera函数去了?

    头文件中声明的也是FinitCamera啊

    我大致晓得这跟C++函数声明有关系,但搞的不是很懂。求助大家,谢谢。

    ----------------------------------------

    背景:一个工程在一台计算机上编译运行的好好的,拷贝到另外一个计算机上,发现项目属性中常用的设置(Include path, Lib path)等都是空的,设置好以后,就出现上面这个问题了。使用的环境是vs2008, OS是Win7 64位的。


    just a beginner, so I am willing to share anything


    • 已编辑 W.J 2013年8月28日 2:39
    2013年8月28日 2:36

答案

  • 应该是没找到对应的 dll 的问题,你应该先找到此 dll 文件,然后把它的目录添加进项目的“VC++目录”-〉“可执行文件目录”。

    • 已标记为答案 W.J 2013年9月3日 15:51
    2013年8月28日 2:59

全部回复

  • 应该是没找到对应的 dll 的问题,你应该先找到此 dll 文件,然后把它的目录添加进项目的“VC++目录”-〉“可执行文件目录”。

    • 已标记为答案 W.J 2013年9月3日 15:51
    2013年8月28日 2:59
  • 恩,dll不是在运行exe时才会寻找吗?我先试试你的方法。

    just a beginner, so I am willing to share anything

    2013年8月28日 3:06
  • 恩,最后的问题出在这里:

    1.我使用了两台电脑,将第一台电脑上的成功编译的解决方案拷贝到第二台电脑上,解决方案的属性出现变动和丢失(例如:include文件路径变成了空,而调试选项也变了),是因为第二台电脑vs2008没有装64位编译器(vs2008安装文件里有,默认安装时是不勾选的)

    2.生成时没有将生成配置从win32改成x64,导致函数的名称不符。


    just a beginner, so I am willing to share anything

    2013年9月3日 15:51