C++中调用 C静态函数库的技巧
发布时间:2021-11-18 14:05:11 所属栏目:PHP教程 来源:互联网
导读:C++中调用 C静态函数库的方法 首先,编写静态库函数 /* player.h */ #ifndef __PLAYER_H #define __PLAYER_H void player_open(char* path); #endif /* player.c */ #includeplayer.h #includestdio.h void player_open(char* path) { printf(you select fil
C++中调用 C静态函数库的方法 首先,编写静态库函数 /* player.h */ #ifndef __PLAYER_H #define __PLAYER_H void player_open(char* path); #endif /* player.c */ #include"player.h" #include<stdio.h> void player_open(char* path) { printf("you select file : %s",path); } 然后,编译成目标文件 [root@MiWiFi-R1CM-srv lllll]# gcc -c player.c -o player.o [root@MiWiFi-R1CM-srv lllll]# ls main.cpp player.c player.h player.o 再然后,打包成静态库 [root@MiWiFi-R1CM-srv lllll]# ar cqs libplayer.a player.o [root@MiWiFi-R1CM-srv lllll]# ls libplayer.a main.cpp player.c player.h player.o 准备c++测试文件 #include<iostream> extern"C" { #include"player.h" } usingnamespace::std; int main(int argc,char** argv) { player_open(argv[1]); cout<<"you input : "<<argv[1]<<endl; return0; } 最后,编译连接 [root@MiWiFi-R1CM-srv lllll]# g++ main.cpp -L.-lplayer -o main [root@MiWiFi-R1CM-srv lllll]# ls libplayer.a main main.cpp player.c player.h player.o [root@MiWiFi-R1CM-srv lllll]#./main ahgkfhaeua you select file : ahgkfhaeuayou input : ahgkfhaeua 编译的时候 main.cpp 要写在 -Ljjj -ljjj 前边,如果写在后边的话就会报错(不知为何) [root@MiWiFi-R1CM-srv lllll]# g++-L.-lplayer main.cpp -o main /tmp/cc6bn6N5.o:Infunction`main': main.cpp:(.text+0x92): undefined reference to `player_open' collect2: ld 返回 1 总结: c++ 要调用c写成的共享库函数时 要注意在c++文件包含c头文件的时候要写在 extern "C"{} 里边,因为不同编译器解释函数名时并不一样 下面用nm命令看一下gcc 和g++ 编译出来的库中符号的区别 /* g++ -c player.c -o player.o*/ [root@MiWiFi-R1CM-srv lllll]# nm libplayer.a player.o: 00000018 T _Z11player_openPc 00000006 T _Z11player_stopv 00000000 T _Z12player_pausev 00000012 T _Z16player_setVolumei 0000000c T _Z18player_setSchedulei U __gxx_personality_v0 U printf [root@MiWiFi-R1CM-srv lllll]# nm libplayerc.a player.o: 00000000 T player_open 0000001b T player_pause 00000025 T player_setSchedule 0000002a T player_setVolume 00000020 T player_stop U printf ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读