Tips--windows系统下gcc编译C文件为so共享库

编程知识 更新时间:2023-04-12 14:34:40

windows系统下gcc编译C文件为so共享库

      • 1. windows系统安装gcc编译工具
      • 2. 利用gcc编译多个c文件
      • 3. 利用python工具验证生成的so共享库

1. windows系统安装gcc编译工具

对于工作机是windows又不想装linux虚拟机的朋友,Mingw-w64是目前兼容性最好的应用。官网链接戳这里。

打开链接之后可以看到上图所示的画面,点击左边的“download”按钮,可以看到如下界面:

鼠标向下滑,我们找到标题为“Sources”的一段文字,点击第一行的“SourceForge”, 如下图所示:

这时,我们看到如下所示的界面,但是记住,千万不要点击绿色的按钮下载,这个方式会导致各种意想不到的bug(经各路大神验证)

我们继续鼠标下滑,找到下图所示的地方,点击下载“x86_64-posix-seh”

下载之后解压,会发现一个文件名为“mingw64”的文件夹,将它放在你觉得合适的位置就可以,我放在D盘,如下所示:
我们进入到bin文件夹,将该文件夹路径“D:\mingw64\bin”添加到系统的环境变量中,具体的操作步骤为:此电脑–属性–高级系统设置–环境变量–找到系统变量中的“Path”–编辑–新建–将“D:\mingw64\bin”添加到系统的环境变量中–确定。
添加环境变量之后打开命令行(win+R, cmd+回车),在命令行中输入指令:

gcc -v

看到如下界面就表示安装成功了

2. 利用gcc编译多个c文件

对于一个C系统工程,不可能只包含一个C文件,会包含多个C文件和头文件,我们编译的时候,首先需要打开命令行,并进入到工程文件的路径中:

cd file_path

然后利用下面语句将所有的c文件(比如a.c,b.c,c.c,d.c)编译成so共享文件库,名字为test:

gcc a.c b.c c.c d.c -fPIC -shared -o test.so

在该文件夹下, 会出现一个名为test.so的文件。值得一提的是,在编译的时候,只需要将所有的c文件编译即可,头文件在编译的时候会自动寻找并包含进去,前提是头文件与C文件在同一个文件夹下。

3. 利用python工具验证生成的so共享库

下面举个例子,有两C文件和H文件,分别是a.c, b.c以及a.h, b.h:

/* a.c */
#include "a.h"
int func1(int x, int y){
	return (x+y);
}
/* a.h */
#ifndef __A_H__ 
#define __A_H__
int func1(int x, int y);
#endif
/* b.c */
#include "a.h"
#include "b.h"
int func2(int x, int y){
	return func1(x+y); // 此处对func1有调用
}

static func3(int x, int y){ // 定义静态函数,这样外部无法调用
	return (x-y);
}
/* b.h */
#ifndef __B_H__ 
#define __B_H__
int func2(int x, int y);
#endif

然后我们使用gcc编译成so文件:

gcc a.c b.c -fPIC -shared -o test.so

然后用python进行验证:

import ctypes
so = ctypes.CDLL(r'D:\\Users\\80352405\\Desktop\\test.so') # so文件路径
so.func1(1, 2)

结果为:

import ctypes
so = ctypes.CDLL(r'D:\\Users\\80352405\\Desktop\\test.so') # so文件路径
so.func2(3, 4)

结果为:

可以发现,对于有依赖关系的C文件,也能够很好的运行,我们看看对于静态函数是否能够调用成功:

import ctypes
so = ctypes.CDLL(r'D:\\Users\\80352405\\Desktop\\test.so') # so文件路径
so.func3(1, 1)

结果为:

当调用静态函数时,返现找不到该函数,这说明了static能够很好的隐藏所作用的函数,不被外部接口调用。但我们不需要在外部使用函数时,可以用static隐藏,对于需要被外部使用的函数,可以在头文件中声明接口,以供外部调用。

更多推荐

Tips--windows系统下gcc编译C文件为so共享库

本文发布于:2023-04-10 21:46:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/927d4f38439a1fc4e6d103bd008c21fe.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   系统   Tips   windows   gcc

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 66215文章数
  • 14阅读数
  • 0评论数