hello2002
驱动牛犊
驱动牛犊
  • 注册日期2002-06-02
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1630回复:2

为什么我编译通过,但链接找不到我指定库里的函数?

楼主#
更多 发布于:2002-08-13 18:34
各位大侠:
    我做了一个test.lib静态库,里面有几个函数,我把test.lib加在了passthru 的sources 中:
PRECOMPILED_INCLUDE=precomp.h
PRECOMPILED_PCH=precomp.pch
PRECOMPILED_OBJ=precomp.obj

TARGETLIBS=$(DDK_LIB_PATH)\\ndis.lib test.lib
USE_MAPSYM=1
...
我build 时编译通过,但链接找不到我指定库里的函数。我在应用层测过调用test.lib 里的函数,没有问题。

错误提示:

miniport.obj() : error LNK2001: unresolved external symbol _opendev@12


敬请高手指教?是否跟passthru 的编译环境或设置有关?


asdfasdf asdfa fasdf
emailxj
驱动牛犊
驱动牛犊
  • 注册日期2002-05-15
  • 最后登录2009-04-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-14 09:01
可能,你的test.lib中“opendev”的导出符号和你的驱动中连接符号不同;

你可以用下面的方法试试:
  在test原程序中用  extern \"C\" 作为那个函数实现的前缀,在驱动中也用extern \"C\" 作为那个函数声明的前缀;
sunnnn
驱动牛犊
驱动牛犊
  • 注册日期2002-01-30
  • 最后登录2009-03-20
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-14 09:28
emailxj兄,这个问题我也碰到过,当时是调用一个用户态的库,我当时觉得用户态的库不能在内核态调用,例如:如果用户态的lib里有调用malloc之类的用户态的内存分配函数的话,就不行了。

但是,你说的也很有道理,那是关于内核态编译和用户态编译的问题,能不能讲一下这两者的编译上有否差别?
先谢了!!

游客

返回顶部