GCC系列: 加载静态链接库
来源:互联网 发布:mac版excel破解 编辑:程序博客网 时间:2024/06/06 12:45
在 mac osx 操作系统下, 请先移步-> GCC系列: Homebrew安装GCC和binutils.
GCC加载链接库会依赖加载顺序, 这样会导致无法调用预期的方法.
下面举例说明.
Car 和 Bus 都有 drive 函数, 在 main 里面调用谁的 drive, 取决于链接库的加载顺序.
Car.c
#include<stdio.h> #include<stdlib.h> int drive(){ printf("Car driving...\n"); return 0;}void stop(){ printf("Car stop.\n");}
Bus.c
#include<stdio.h> #include<stdlib.h> int drive(){ printf("Bus driving...\n"); return 0;}void start(){ printf("Bus start.\n");}
这里注意: Car 和 Bus 都有 drive.
现在把 Car.c 和 Bus.c 分别编译生成独自的静态库文件.
gcc-4.9 -shared -o libBus.so Bus.c
gcc-4.9 -shared -o libCar.so Car.c
编译完成之后, 会有对应的 so 库文件生成.
接下来, 开始使用这两个库文件.
main.c
#include<stdio.h> #include<stdlib.h> //// 在 gcc 编译器下, 必须声明方法// 在 clang 编译下, 只是给了警告//int drive();void start();void stop();int main(){ drive(); stop(); start(); return 0;}
编译 main.c
gcc-4.9 -o app main.c -L ./ -lCar -lBus
运行 app
./app Car driving...Car stop.Bus start.
我们交换一下链接库顺序再来编译 main.c
gcc-4.9 -o app2 main.c -L ./ -lBus -lCar
./app2 Bus driving...Car stop.Bus start.
可以看出, 编译时链接库顺序不一样, 调用的函数(drive)也不一样.
gcc 的 - l 和 -L 参数的用法, 可以移步: gcc -l参数和-L参数
0 0
- GCC系列: 加载静态链接库
- GCC强制链接静态库
- gcc 编译静态链接库
- g++ 加载静态链接库
- GCC动态链接库和静态库
- gcc共享库和静态链接库
- gcc使用---动态库链接静态库
- gcc编译动态和静态链接库
- gcc编译动态和静态链接库
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- linux gcc 使用静态库链接程序
- gcc静态库链接的问题
- gcc/g++ 静态动态库 混链接.
- GCC编译动态和静态链接库
- gcc编译动态和静态链接库
- gcc编译使用动态静态链接库
- gcc/g++ 静态动态库 混链接.
- How I explained OOD to my wife
- 前端工具(sublime)
- 初探linux内存管理
- JAVA JSON 开发记录
- MySQL分区性能初探
- GCC系列: 加载静态链接库
- 自定制模版
- Lua的线程和状态
- linux中fork()函数详解
- win8下,gns3 模拟ASA842,ASA和真机km-test(loopback)互ping是五个问号的解决方案
- 嵌入式 串口服务器
- CXGRID 定位行,列,取值
- js- 引用和复制(传值和传址)
- Dynamics CRM 2015 Update 1 系列(4): 自定义主键 - Alternate Keys