首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
WHY42
搜索
用户菜单
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Makefile:静态库与动态库”︁的源代码
←
Makefile:静态库与动态库
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
<source lang="make" highlight="15-19"> CC = gcc COMPILER_FLAGS = -O2 objects = mathApi.o main.o bin = hello.exe static = libmath.a shared = libmath.so all:main main:$(objects) $(CC) -o $(bin) $(objects) static:mathApi.o ar cr $(static) mathApi.o shared:mathApi.o $(CC) $(COMPILER_FLAG) mathApi.o -shared -fPIC -o $(shared) .PHONY: clean clean: rm -f $(objects) $(bin) </source> =C/C++混合编程= 在C和C++混用的情况下,因为导出符号不同,链接时需要注意,有两种做法让C和C++兼容: <source lang="cpp"> //test.cpp extern "C"{ #include "mathApi.h" } </source> 或者直接在头文件中进行处理: <source lang="cpp"> //mathApi.h #ifdef __cplusplus extern "C"{ #endif //.... #ifdef __cplusplus } #endif </source> 可以试用nm命令查看导出函数: <source lang="bash"> nm libmathApi.a </source> 另外,遇到个蛋疼的问题,无论如何编译都提示: Undefined reference to..,后来发现,-l选项必须放在源文件后面: <source lang="bash"> #wrong #g++ -o test.exe -I. -L. -lmathApi test.cpp g++ -o test.exe -I. -L. test.cpp -lmathApi </source> [[Category:Programe]]
返回
Makefile:静态库与动态库
。