Windows下 如何制作动态库和静态库
2014-03-12 16:14
232 查看
以前在linux下制作过动态库和静态库,由于工作需要,需要在windows下做同样的工作;有了以前的经验所以做起来并不算很麻烦;
1、下载mingw-get-inst-20120426.exe
2、安装之后会产生一个MinGW的目录,将下面的bin目录加入Path环境变量中,我的路径在C:\MinGW\bin。
先查看下gcc的版本:
$ gcc.exe -v
specs
COLLECT_GCC=c:\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
mingw32
../gcc-4.6.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --ee-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs -ld=mingw32 --prefix=/mingw
win32
gcc 4.6.2 (GCC)
查看gcc的使用方法:
用法:gcc.exe [选项] 文件...
选项:
-pass-exit-codes 在某一阶段退出时返回最高的错误码
--help 显示此帮助说明
--target-help 显示目标机器特定的命令行选项
--help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
显示特定类型的命令行选项
(使用‘-v --help’显示子进程的命令行参数)
--version 显示编译器版本信息
-dumpspecs 显示所有内建 spec 字符串
-dumpversion 显示编译器的版本号
-dumpmachine 显示编译器的目标处理器
-print-search-dirs 显示编译器的搜索路径
-print-libgcc-file-name 显示编译器伴随库的名称
-print-file-name=<库> 显示 <库> 的完整路径
-print-prog-name=<程序> 显示编译器组件 <程序> 的完整路径
-print-multi-directory 显示不同版本 libgcc 的根目录
-print-multi-lib 显示命令行选项和多个版本库搜索路径间的映射
-print-multi-os-directory 显示操作系统库的相对路径
-print-sysroot 显示目标库目录
-print-sysroot-headers-suffix 显示用于寻找头文件的 sysroot 后缀
-Wa,<选项> 将逗号分隔的 <选项> 传递给汇编器
-Wp,<选项> 将逗号分隔的 <选项> 传递给预处理器
-Wl,<选项> 将逗号分隔的 <选项> 传递给链接器
-Xassembler <参数> 将 <参数> 传递给汇编器
-Xpreprocessor <参数> 将 <参数> 传递给预处理器
-Xlinker <参数> 将 <参数> 传递给链接器
-save-temps 不删除中间文件
-save-temps=<arg> 不删除中间文件
-no-canonical-prefixes 生成其他 gcc 组件的相对路径时不生成规范化的
前缀
-pipe 使用管道代替临时文件
-time 为每个子进程计时
-specs=<文件> 用 <文件> 的内容覆盖内建的 specs 文件
-std=<标准> 指定输入源文件遵循的标准
--sysroot=<目录> 将 <目录> 作为头文件和库文件的根目录
-B <目录> 将 <目录> 添加到编译器的搜索路径中
-v 显示编译器调用的程序
-### 与 -v 类似,但选项被引号括住,并且不执行命令
-E 仅作预处理,不进行编译、汇编和链接
-S 编译到汇编语言,不进行汇编和链接
-c 编译、汇编到目标代码,不进行链接
-o <文件> 输出到 <文件>
-x <语言> 指定其后输入文件的语言
允许的语言包括:c c++ assembler none
‘none’意味着恢复默认行为,即根据文件的扩展名猜测
源文件的语言
以 -g、-f、-m、-O、-W 或 --param 开头的选项将由 gcc.exe 自动传递给其调用的
不同子进程。若要向这些进程传递其他选项,必须使用 -W<字母> 选项。
报告程序缺陷的步骤请参见:
<http://gcc.gnu.org/bugs.html>.
使用gcc制作动态库:
测试程序:test.c test.h
#include <stdio.h>
int test(void)
{
printf( "File:%s\n"
"Line:%d\n"
"Date:%s\n",__FILE__,__LINE__,__DATE__);
return 0;
}
#ifndef __TEST_H__
extern int test(void);
#endif
编译指令,这个在dos里面运行:
gcc test.c --shared -o test.lib程序调用库测试:
-o 输出文件
-L./ 连接路径,./为当前路径
使用gcc + ar制作静态库:
1、使用gcc生产.o格式的文件
gcc -c test.c2、使用ar连接,生产静态库
测试程序:
跟上面的一样;
测试:
Administrator@-RAIN ~/Desktop
$ gcc main.c -L./ test.a -o test.exe
Administrator@-RAIN ~/Desktop
$ ./test.exe File:test.c Line:7 Date:Mar 12 2014
希望大家多多指点!
1、下载mingw-get-inst-20120426.exe
2、安装之后会产生一个MinGW的目录,将下面的bin目录加入Path环境变量中,我的路径在C:\MinGW\bin。
先查看下gcc的版本:
$ gcc.exe -v
specs
COLLECT_GCC=c:\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
mingw32
../gcc-4.6.2/configure --enable-languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --ee-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs -ld=mingw32 --prefix=/mingw
win32
gcc 4.6.2 (GCC)
查看gcc的使用方法:
用法:gcc.exe [选项] 文件...
选项:
-pass-exit-codes 在某一阶段退出时返回最高的错误码
--help 显示此帮助说明
--target-help 显示目标机器特定的命令行选项
--help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
显示特定类型的命令行选项
(使用‘-v --help’显示子进程的命令行参数)
--version 显示编译器版本信息
-dumpspecs 显示所有内建 spec 字符串
-dumpversion 显示编译器的版本号
-dumpmachine 显示编译器的目标处理器
-print-search-dirs 显示编译器的搜索路径
-print-libgcc-file-name 显示编译器伴随库的名称
-print-file-name=<库> 显示 <库> 的完整路径
-print-prog-name=<程序> 显示编译器组件 <程序> 的完整路径
-print-multi-directory 显示不同版本 libgcc 的根目录
-print-multi-lib 显示命令行选项和多个版本库搜索路径间的映射
-print-multi-os-directory 显示操作系统库的相对路径
-print-sysroot 显示目标库目录
-print-sysroot-headers-suffix 显示用于寻找头文件的 sysroot 后缀
-Wa,<选项> 将逗号分隔的 <选项> 传递给汇编器
-Wp,<选项> 将逗号分隔的 <选项> 传递给预处理器
-Wl,<选项> 将逗号分隔的 <选项> 传递给链接器
-Xassembler <参数> 将 <参数> 传递给汇编器
-Xpreprocessor <参数> 将 <参数> 传递给预处理器
-Xlinker <参数> 将 <参数> 传递给链接器
-save-temps 不删除中间文件
-save-temps=<arg> 不删除中间文件
-no-canonical-prefixes 生成其他 gcc 组件的相对路径时不生成规范化的
前缀
-pipe 使用管道代替临时文件
-time 为每个子进程计时
-specs=<文件> 用 <文件> 的内容覆盖内建的 specs 文件
-std=<标准> 指定输入源文件遵循的标准
--sysroot=<目录> 将 <目录> 作为头文件和库文件的根目录
-B <目录> 将 <目录> 添加到编译器的搜索路径中
-v 显示编译器调用的程序
-### 与 -v 类似,但选项被引号括住,并且不执行命令
-E 仅作预处理,不进行编译、汇编和链接
-S 编译到汇编语言,不进行汇编和链接
-c 编译、汇编到目标代码,不进行链接
-o <文件> 输出到 <文件>
-x <语言> 指定其后输入文件的语言
允许的语言包括:c c++ assembler none
‘none’意味着恢复默认行为,即根据文件的扩展名猜测
源文件的语言
以 -g、-f、-m、-O、-W 或 --param 开头的选项将由 gcc.exe 自动传递给其调用的
不同子进程。若要向这些进程传递其他选项,必须使用 -W<字母> 选项。
报告程序缺陷的步骤请参见:
<http://gcc.gnu.org/bugs.html>.
使用gcc制作动态库:
测试程序:test.c test.h
#include <stdio.h>
int test(void)
{
printf( "File:%s\n"
"Line:%d\n"
"Date:%s\n",__FILE__,__LINE__,__DATE__);
return 0;
}
#ifndef __TEST_H__
extern int test(void);
#endif
编译指令,这个在dos里面运行:
gcc test.c --shared -o test.lib程序调用库测试:
#include <stdio.h> #include "test.h" int main() { test(); return 0; }
gcc main.c -L./ test.lib -o test.exe
$ ./test.exe File:test.c Line:7 Date:Mar 12 2014--shared 生成动态库
-o 输出文件
-L./ 连接路径,./为当前路径
使用gcc + ar制作静态库:
1、使用gcc生产.o格式的文件
gcc -c test.c2、使用ar连接,生产静态库
ar -cr test.a test.o
测试程序:
跟上面的一样;
测试:
Administrator@-RAIN ~/Desktop
$ gcc main.c -L./ test.a -o test.exe
Administrator@-RAIN ~/Desktop
$ ./test.exe File:test.c Line:7 Date:Mar 12 2014
希望大家多多指点!
相关文章推荐
- Windows下如何查看静态库和动态库
- Windows 下VC++6.0制作、使用动态库和静态库
- 在Windows下制作静态库和动态库
- C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)
- windows下查看动态库和静态库的函数接口
- windows下静态库和动态库的使用
- 如何使用Eclipse的NDK开发动态库,静态库
- linux下制作静态库和动态库的方法
- Linux下静态库和动态库(共享库)的制作与使用
- Windows静态库和动态库的创建和使用 (lib vs dll)
- 嵌入式 Linux下在制作静态库或者动态库的时候注意问题
- 如何制作windows登陆窗口??
- Linux中如何创建静态库和动态库
- 通用的makefile,制作动态库和静态库
- Windows和Linux下的目标文件、静态库和动态库
- 图解如何使用VS2010和Qt导出和使用静态库,动态库
- linux下制作静态库与动态库
- Windows静态库和动态库的创建和使用
- Windows静态库和动态库的调用方法汇总
- Linux下静态库和动态库(共享库)的制作与使用