如何使用C/C++动态库与静态库中的宏

  在哪个cpp文件中使用的该动态库或静态库,就在该h/cpp文件所在的工程的预处理命令中添加库中的宏。

如有库工程add,其头文件如下

#ifndef _ADD_H
#define _ADD_H

#if defined( _WIN32 ) || defined( __MINGW32__ )
#   if defined( ADD_EXPORTS )
#       define ADD_EXPORT __declspec(dllexport)
#   elif defined( ADD_USE_DLL_IMPORT ) || !defined( ADD_USE_STATIC_LIB )
#       define ADD_EXPORT __declspec(dllimport)
#   else
#       define ADD_EXPORT
#   endif

ADD_EXPORT int add(int a, int b);

#endif

则VS上编译动态库时,需要在add工程的预处理指令中增加ADD_EXPORTS。

另有测试工程test:若其要使用动态库中的add函数,则其工程中需要使用 ADD_USE_DLL_IMPORT 预处理指令。

时间: 2024-12-29 06:47:49

如何使用C/C++动态库与静态库中的宏的相关文章

Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用ELF格

如何使用Eclipse的NDK开发动态库,静态库

============问题描述============ 如何使用Eclipse的NDK开发动态库,静态库? Eclipse中已经安装了NDK,CDT和Esequoyah并配置(是在网上查的). 我是做C++的,公司业务需要自学Android,对Java也是知道一点皮毛. 在网上查了一些资料,我都没有成功做出最简单的动态库或静态库,郁闷啊! 有没有详细指导? ============解决方案1============ 你去搜一下Android的jni开发,就知道了,一点都不难,不过一般开发ndk

动态库和静态库

 1.静态库不需要main函数,要想生成lib,要修改属性à常规à配置类型à改成dll 2.静态库中的头文件只是说明,是给程序员看的,其实lib里面已经有了接口. 3.链接lib的时候程序的体积就变大了. 4.静态库更新的时候,需要重新生成,然后调用 5.动态库调用就不用重新生成. 6.动态库的调用代码:(使用的是HMODULELoadLibraryA的方式进行调用) 接口 7.编写的动态库如下: #include<stdio.h> #include<stdlib.h> #in

Linux系统中“动态库”和“静态库”那点事儿【转】

转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable and Linking Format,可执行连接格式)是UNIX系统实验室(USL)作为应用程序二进制

ios 开发中 动态库 与静态库的区别

使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源 3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的. 从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小. 等其他好处, 从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开

函数库:静态库和动态库

1.函数库 函数库其实就是一些写好的函数集合,方便别人的复用.实现的封装之后,最终的目的都是给别人调用. 2.库的形式 库的形式分:动态链接库和静态链接库. 优点: (1)库文件都是被编译好的二进制文件,别人看不到源代码,可以保持保密:(2)同时不会因为不小心被修改出现问题,便于维护. LINUX 下的库学习: 静态链接库:.a 文件 其实就是将多函数,做编译但是不链接生成的 .o 文件,使用 ar 工具打包为 .a 的文件.编译的阶段,当调用这些库的时候,链接器就会去 .a 的库文件中拿出被调

VS2008 动态库和静态库的生成和加载

第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\VC 确定 下一步 应用程序类型:选择DLL 完成 2) 编写代码: 2-1) 增加一个头文件:dllTest.h #define ICILIB_UTIL_API __declspec(dllexport)  //生成动态库时,同时在Debug或Release目录下生成.lib和.dll文件. class IC

linux动态库与静态库使用比较

在windows下,动态库dll的使用往往伴随着lib的指引,而linux使用动态库和静态库则有较大的不同. linux静态库和动态库的区别 1. 静态库 名字一般是libxxx.a:利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,编译后的执行程序不需要外部的函数库支持,但是,升级比较麻烦.每一次版本更新都需要重新编译. 2. 动态库 名字一般是libxxx.so;动态库没有被编译进最终程序,只有在需要的时候,动态加载到内存中.编译后的程序不包含动态库部分,程

运行时库以及静态库,动态库之间的关系

了解篇 http://www.cnblogs.com/renyuan/p/5031100.html 知道MT,MD之间的不同,MT会将LIBC.LIB或者LIBCMT.LIB打包进可执行程序, 而MD则告诉可执行程序,运行的时候调用msvcrt.dll,因此任何一个工程 只能选择运行时库中的一种方式,MD,MDd,MT,MTd,这四种方式的一种, 连接C库,不管是一个静态库,还是一个动态库,还是一个可执行程序, 链接的其他库的时候,都必须保持一致,否则就会出现如下的提示: 错误 LNK2038

解决遇到动态库链接静态库

场景: 二进制Link-->动态库-->第三方静态库 Linux环境中需要动态库链接第三方的静态库 错误: /usr/bin/ld: ../../3rdpart/x64/muduo/lib/libbase.a(AsyncLogging.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC ../../3rdpart/x64/mu