拂晓·明月·弯刀

观望,等待只能让出现的机会白白溜走

  C++博客 :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::

以下总结只针对windows平台:

  1. dll文件应有static 和 dynamic的版本,编译时临时文件的目录分别是: Debug, Release, DebugDll, ReleaseDll。
  2. 一般推荐使用dll的static版本,因为这样就不用指定dll文件所在的路径,以后对文件大小或其它要求时再换成dynamic版本的;但中间要注意的是:如果static版本文件有所改变,依赖其的项目要手动重新编译,不然使用的还是老版本的static 库。
  3. dll文件命名为: XxD.lib(Debug), Xx.lib(Release), XxD_dll.lib(Debug Dynamic), Xx_dll.lib(Release Dynamic), 如果是Unicode版本,在相应的'.'或'D'字符前加U,如:XxUD.lib(Debug Unicode), XxU.lib(Release Unicode)。
  4. 作为第三方API时,应提供完整的include, lib, bin目录,readme.txt文件,可选择提供example, doc目录。 其中:include文件夹中放依赖的头文件;lib中放所有的*.lib文件;bin中放所有的*.dll文件。
  5. 作为第三方API时,最好是通过def的方式生成,这样可以跨语言使用。如果只限于c++调用,并且要导出的类比较多,则可以折中考虑使用dllexport的方式。

以下总结是以前在Linux平台:(Eclipse+CDT)

  1. 如何新建库项目: 先新建一空项目,再修改设置:项目Property页--->C/C++ Buildings--->Settings--->Build Artifact--->Artifact Type中选择库类型。
  2. 静态库使用:
    • 设置include头文件目录:.I./../XxLib/include;
    • 设置Linker库文件目录: -L./../XxLib/lib;
    • 设置Linker库文件: -lXxLib
  3. 动态库使用:
    • 隐式调用同上面的静态库;
    • 显式调用在Linker中: -ldl -lXxLib;
    • 如果动态库不是放在/lib,/usr/lib目录下,需设置环境变量:LD_LIBRARY_PATH=./../XLib/lib
  4. 当同时存在该库的静态版本和共享版本时,链接器优先使用共享版本Xx.so,此时你可以使用-static链接选项指定链接静态版本Xx.a
  5. 动态库可以导出两个特殊的函数:_init和_fini,前者在动态库被加载后调用,后者在动态库被卸载前调用,我们可以使用这两个函数做些特别的工作。需要注意的是:在定义这两个函数后编译时,需要使用-nostartfiles选项,否则编译器报重复定义错误。
  6. 应用程序与库混合调试:项目Property页--->C/C++ General--->Paths and Symbols--->References--->选择引用库。
  7. ldd用来查看程序所依赖的共享库,同时也方便我们判断共享库是否被找到; nm命令查看obj文件(.so也是一个obj)中的标识(函数、变量)。

Q:在Linux的DLL中如何使用stdcall调用方式

posted on 2010-09-16 15:54 一路风尘 阅读(362) 评论(0)  编辑 收藏 引用 所属分类: C++技术/工作总结

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理