Ⅰ rokon如何编译成库文件
自己回复一下,
还是不知道如何编译成库文件,
但可以将src文件拷贝到新建的工程里,
直接引用和修改
Ⅱ DLL文件编译,高手请指教。
DLL文件即动态链接库文件,是一种可执行文件,它允许程序共享执行特殊任务所必需的代码和其他资源。Windows提供的DLL文件中包含了允许基于Windows的程序在Windows环境下操作的许多函数和资源。
DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他扩展名。它们向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。
DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当你删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。
DLL是动态连接库。使用动态连接库的一些好处是:
1.多个应用程序共享代码和数据:比如Office软件的各个组成部分有相似的外观和功能,这就是通过共享动态连接库实现的。
2.在钩子程序过滤系统消息时必须使用动态连接库。
3.动态连接库以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。如果小组中的一个成员开发了一组实用例程,他就可以把这些例程放在一个动态连接库中,让小组的其他成员使用。
4.为了实现应用程序的国际化,往往需要使用动态连接库。使用动态连接库可以将针对某一国家、语言的信息存放在其中。对于不同的版本,使用不同的动态连接库。在使用AppWizard生成应用程序时,我们可以指定资源文件使用的语言,这就是通过提供不同的动态连接库实现的。
VC++、C++ Builder、Delphi都可以编写DLL文件。Visual Basic 5.0以上版本也可以编写一种特殊的DLL,即ActiveX DLL。
DLL不是独立运行的程序,它是某个程序的一个部分,它只能由所属的程序调用。用户不能,也不需要打开它。
Ⅲ linux编译动态库文件
这个没关系的啊,找不到符合是你编译Makefile什么的本身就有问题,不是你的库有问题
Ⅳ Linux下编译程序,如何同时连接两个库文件,gcc命令应该怎么写。
-L后的应该是路径,本例应该是-L/usr/lib/,-l后应该是库的名字,注意,这里库的名字是吧库"libapi.so"去掉前面的"lib"和后面的".so",应该是-lapi.而且一个-L和-l对应一个库.所以你的应该改为:
gcc -g -o test.exe test.c -L/usr/lib/ -lapi -L/usr/lib/ -lpk11.
还有,.exe文件是windows下的可执行文件格式,linux下不这么用,但是就本例而言也能运行.
Ⅳ c++中如何把类编译成类似于库文件,以后直接包含头文件即可
使用两个文件,一个为 文件名.h,一个为 文件名.cpp
文件名.h里这么写:
#ifndef (这里随便写,最好是文件名)_FILE_H_
#define _FILE_H_
//类的声明
#endif
文件名.cpp里这么写
#include "文件名.h"
//类的实现
注意类的实现函数名前面加 类名::
编译,编译器只会编译cpp文件。这时就可以通过包含h文件去使用类了。如果是其他工程使用,只需要拷贝obj文件和h文件就行了。
那个被编译成了lib文件,放在了头文件所在的include文件夹同层的lib文件夹下
Ⅵ c++中如何把类编译成类似于库文件,以后直接包含头文件即可
请搜索“nmake makefile cl.exe lib”之类的关键字。
比如
-------------------------------
CL.exe
CL.exe是控制Microsoft C和C++编译器与链接器的32位工具。编译器产生通用对象文件格式(COFF)对象(.obj)文件。链接器产生可执行文件(.exe)或动态链接库文件(DLL)。注意,所有编译器选项都区分大小写。若要编译但不链接,请使用/c。使用NMAKE生成输出文件。使用BSCMAKE支持类浏览。以下是一个完整的编译器选项分类列表。
优化
选项 作用
/O1 创建小代码
/O2 创建快速代码
/Oa 假设没有别名
/Ob 控制内联展开
/Od 禁用优化
/Og 使用全局优化
/Oi 生成内部函数
/Op 改善浮点数一致性
/Os 代码大小优先
/Ot 代码速度优先
/Ow 假定在函数调用中使用别名
/Ox 使用最大优化 (/Ob1gity /Gs)
/Oy 省略框架指针
代码生成
选项 作用
/clr 启用C++的托管扩展并产生在公共语言运行库上运行的输出文件
/EH 指定异常处理模型
/G3 优化代码以优选386处理器。在Visual C++ 5.0 中已经停用,编译器将忽略此选项
/G4 优化代码以优选486处理器。在 Visual C++ 5.0中已经停用,编译器将忽略此选项
/G5 优化代码以优选Pentium
/GB 与/G6等效;将_M_IX86的值设置为600
/Gd 使用__cdecl调用约定
/Ge 激活堆栈探测
/GF 启用字符串池
/GH 调用挂钩函数 _penter
/GL 启用全程序优化
/Gm 启用最小重新生成
/Gr 启用运行时类型信息 (RTTI)
/Gr 使用__fastcall调用约定
/GS 控制堆栈探测
/GT 支持使用静态线程本地存储区分配的数据的纤程安全
/GX 启用同步异常处理
/Gy 启用函数级链接
/GZ 使用__stdcall调用约定
/MD 使用MSVCRT.lib创建多线程DLL
/MDd 使用MSVCRTD.lib 创建调试多线程DLL
/ML 使用LIBC.lib 创建单线程可执行文件
/MLd 使用LIBCD.lib 创建调试单线程可执行文件
/MT 使用LIBCMT.lib创建多线程可执行文件
/MTd 使用LIBCMTD.lib创建调试多线程可执行文件
输出文件
选项 作用
/FA 创建列表文件设置列表文件名
/Fd 重命名程序数据库文件
/Fe 重命名可执行文件
/Fm 创建映射文件
/Fo 创建对象文件
/Fp 指定预编译头文件名
/FR 生成浏览器文件
/Fx 将插入的代码与源文件合并
……
链接
选项 作用
/F 设置堆栈大小
/LD 创建动态链接库
/LDd 创建调试动态链接库
/link 将指定的选项传递给LINK
/MD 使用MSVCRT.lib编译以创建多线程DLL
/MDd 使用MSVCRTD.lib编译以创建调试多线程DLL
/ML 使用LIBC.lib编译以创建单线程可执行文件
/MLd 使用LIBCD.lib编译以创建调试单线程可执行文件
/MT 使用LIBCMT.lib编译以创建多线程可执行文件
/MTd 使用 LIBCMTD.lib 编译以创建调试多线程可执行文件
……
……
……
更多的我就不贴出来了。。。msdn中对nmake作了详细说明的。
下面一个nmake的makefile例子:
#命令
CC=cl.exe
DEL=del /Q /S
#头文件与库文件目录
INCLUDES=
LIBS=
#编译链接选项与宏定义
MT=MD ---------------(1)
DEFS=-DWIN32
MOD= ---------------(2)
#输出文件
OUTPUT=test.exe
OBJS=main.obj
#内部变量
CFLAGS=/$(MT) $(INCLUDES) $(DEFS) /nologo
LINK=link $(MOD) /OUT:"$(OUTPUT)"
#依赖关系
all:$(OBJS)
$(LINK) $(OBJS)
main.obj:
$(CC) $(CFLAGS) main.cpp -Fo%|fF.obj
clean:
del /Q /S $(OBJS) $(OUTPUT)*
(1):
MD 使用MSVCRT.lib创建多线程DLL
MDd 使用MSVCRTD.lib 创建调试多线程 DLL
ML 使用LIBC.lib创建单线程可执行文件
MLd 使用LIBCD.lib创建调试单线程可执行文件
MT 使用LIBCMT.lib创建多线程可执行文件
MTd 使用LIBCMTD.lib创建调试多线程可执行文件
(2):
为空 生成可执行文件
/LIB 生成静态链接库
/DLL 生成动态链接库
Ⅶ 关于整个编译过程和库文件的问题
1 ABD, 会加载到生成的可执行文件中
2 ABC, 不会加载到生成的可执行文件中
3 不是. 编译器会有对应的选项去帮助你生成所需的文件, 比如
gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.a
就可以给你生成个.dll
Ⅷ Qt下如何编译库
akefile文件。一般是qt里自带的qmake工具。
首先先写好cpp和头文件,在当前目录下依次执行qmake -project,qmake,make即可编译。
另外,团IDC网上有许多产品团购,便宜有口碑
Ⅸ 如何将源文件编译成库文件
问题说的不是很清楚!
如果你是希望你编的函数能像库函数那样直接调用的话
可以把你的函数放到一个文件里
如果以后你那个程序需要这些函数时直接包含该文件就行了
像使用头文件那样#include"myfile.c"( 注意这里是用双引号)
然后在你程序中就可以直接调用你自定义的函数了
如果我理解题目错误,敬请原谅!
【原创答人】