Example:
file1.c:
asm (\
asm (\ void adef (char * s) {
printf (\ }
void bdef (char * s) {
printf (\ }
file2.c:
asm (\
asm (\ asm (\ void cdef (char * s) {
printf (\ }
void ddef (char * s) {
printf (\ }
int printf (void) {
return 9; }
themain.c:
int main (void) {
cdef (); return 0; } thedll.def
LIBRARY thedll
HEAPSIZE 0x40000, 0x2000 EXPORTS bdef @ 20
cdef @ 30 NONAME SECTIONS donkey READ WRITE aardvark EXECUTE
#下面开始编译的过程 # 第1步、编译成.o文件
# Compile up the parts of the dll and the program gcc -c file1.c file2.c themain.c
# 第2步、建立static库(静态库)
# Optional: put the dll objects into a library
# (you don't have to, you could name all the object # files on the dlltool line) ar qcv thedll.in file1.o file2.o ranlib thedll.in
# 第3步、用dlltool工具从def文件导出.lib(import表,用于生成exe文件时,进行的连接接口库)和.exp文件(export表,用于生成dll时所使用)
# Run this tool over the DLL's .def file and generate an exports # file (thedll.o) and an imports file (thedll.a).
# (You may have to use -S to tell dlltool where to find the assembler). dlltool --def thedll.def --output-exp thedll.o --output-lib thedll.a # 第4步、生成dll模块,需要静态库和export表
# Build the dll with the library and the export table ld -o thedll.dll thedll.o thedll.in
# 第5步、生成exe模块。注意,它这里连接的接口库thedll.a,而不是thedll.in静态库 # Link the executable with the import library gcc -o themain.exe themain.o thedll.a
动态连接时需要重定位方式的编译过程
This example can be extended if relocations are needed in the DLL: # 第1步、编译成.o文件
# Compile up the parts of the dll and the program gcc -c file1.c file2.c themain.c
# 第2步、用dlltool工具从def文件导出.lib(import表,用于生成exe文件时,进行的连接接口库) # Run this tool over the DLL's .def file and generate an imports file. dlltool --def thedll.def --output-lib thedll.lib
# 第3步、生成exe模块。注意,它这里连接的接口库thedll.a,并产生用于重定位的base file # Link the executable with the import library and generate a base file # at the same time
gcc -o themain.exe themain.o thedll.lib -Wl,--base-file -Wl,themain.base # 第4步、用dlltool工具从def文件导出.exp文件(export表,用于生成dll时所使用) # Run this tool over the DLL's .def file and generate an exports file # which includes the relocations from the base file.
dlltool --def thedll.def --base-file themain.base --output-exp thedll.exp # 第5步、生成dll模块,需要export表
# Build the dll with file1.o, file2.o and the export table ld -o thedll.dll thedll.exp file1.o file2.o
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库mingw环境中使用dlltool工具来生成动态库的步骤在线全文阅读。
相关推荐: