FreeBSD 6.0架设管理与应用-第八章 编译核心
2010-08-16 15:54
351 查看
http://bbs.hadoopor.com/thread-3313-1-1.html
x.cpp为共享库libx.so的实现,b.cpp为可执行b的实现。
x.cpp文件内容:
#include <stdio.h>
#include <stdlib.h>
// 使用C++作为编译器
void woo()
{
printf("woo\n");
}
// foo作为共享库的入口,必须为C函数
extern "C" foo()
{
printf("foo\n");
exit(0); // 请注意这里必须调用,否则输出foo后会有段错误
}
b.cpp文件内容:
int main()
{
extern void woo();
extern "C" void foo();
woo();
foo();
return 0;
}
编译x.cpp为可执行的共享库:
g++ -g -o libx.so -fPIE -pie -nostartfiles -Wl,-e,foo -rdynamic x.cpp
-fPIE -pie是保证共享库可以执行,其中-fPIE编译参数,表示生成与位置无关的可执行代码(-fPIC只是生成与位置无关的非可执行代码),-pid是链接参数;-Wl,-e,foo指定共享库的入口函数,相当于可执行程序的main函数;如果没有-nostartfiles,则链接时会报main函数未定义;-rdynamic也是必须的,否则编译b.cpp时会报找不到foo定义;如需查看详细的编译链接过程,加上-v参数。请注意不能包含-shared[/b]参数,否则运行共享库时直接段错误。
编译b.cpp为可执行文件:
g++ -g -o b -L. -lx b.cpp
成功之后,libx.so和b都是可执行的了,其中libx.so的入口是foo,而b的入口是main函数。
x.cpp为共享库libx.so的实现,b.cpp为可执行b的实现。
x.cpp文件内容:
#include <stdio.h>
#include <stdlib.h>
// 使用C++作为编译器
void woo()
{
printf("woo\n");
}
// foo作为共享库的入口,必须为C函数
extern "C" foo()
{
printf("foo\n");
exit(0); // 请注意这里必须调用,否则输出foo后会有段错误
}
b.cpp文件内容:
int main()
{
extern void woo();
extern "C" void foo();
woo();
foo();
return 0;
}
编译x.cpp为可执行的共享库:
g++ -g -o libx.so -fPIE -pie -nostartfiles -Wl,-e,foo -rdynamic x.cpp
-fPIE -pie是保证共享库可以执行,其中-fPIE编译参数,表示生成与位置无关的可执行代码(-fPIC只是生成与位置无关的非可执行代码),-pid是链接参数;-Wl,-e,foo指定共享库的入口函数,相当于可执行程序的main函数;如果没有-nostartfiles,则链接时会报main函数未定义;-rdynamic也是必须的,否则编译b.cpp时会报找不到foo定义;如需查看详细的编译链接过程,加上-v参数。请注意不能包含-shared[/b]参数,否则运行共享库时直接段错误。
编译b.cpp为可执行文件:
g++ -g -o b -L. -lx b.cpp
成功之后,libx.so和b都是可执行的了,其中libx.so的入口是foo,而b的入口是main函数。
相关文章推荐
- FreeBSD 6.0架设管理与应用-第二章 安裝 FreeBSD
- FreeBSD 6.0架设管理与应用-第三章 UNIX 系统入门
- FreeBSD 6.0架设管理与应用-第二十章 SAMBA网络邻居
- FreeBSD 6.0架设管理与应用-第四章 使用者管理
- FreeBSD 6.0架设管理与应用-第二十一章 NFS
- FreeBSD 6.0架设管理与应用-第五章 网络设定
- FreeBSD 6.0架设管理与应用-第二十二章 DNS 服务器
- FreeBSD 6.0架设管理与应用-第六章 档案系统管理
- FreeBSD 6.0架设管理与应用-第二十四章 Shell Script
- FreeBSD 6.0架设管理与应用-第七章 系统安全
- FreeBSD 6.0架设管理与应用 [可下载电子文档]
- FreeBSD 6.0架设管理与应用-第九章 系统调校
- FreeBSD 6.0架设管理与应用-第十章 软件安装
- FreeBSD 6.0架设管理与应用-附录 A /etc目录下的档案介绍
- FreeBSD 6.0架设管理与应用-第十一章X Window 的使用
- FreeBSD 6.0架设管理与应用-附录B 制作FreeBSD安装光盘
- FreeBSD 6.0架设管理与应用-第十二章 NAT 及防火墙
- FreeBSD 6.0架设管理与应用-第十三章 网页服务器
- FreeBSD 6.0架设管理与应用-第十四章 网页服务器进阶应用
- FreeBSD 6.0架设管理与应用-第十五章 FTP 服务器