分别针对不同的共享库构建多个二进制版本

问题描述

| 我想创建一个go可执行文件,它通过其本机界面与xen通信。为此有一个C共享库(实际上是2个),我用cgo创建了一个简单的go包装器。 问题是我要针对3个xen版本(3.2、3.4、4.0),每个版本都有一个不同的共享库。该库本身提供了基本相同的API,但是C头中定义的结构的大小和形状不同,因此相同的已编译go二进制文件无法与这些不同的共享库一起使用。 我想要一个go二进制文件,其中包含\'main \'和一个go pkg,它是xen的包装。 我在考虑2个解决方案: 我可以构建3个不同版本的已编译pkg,还可以构建3个不同版本的主二进制文件,每个版本都与相应的pkg版本链接。此解决方案需要手动构建makefile,以便我可以传递正确的路径等 我可以构建一个薄的C包装器作为共享库,并针对3个Xen C绑定版本将其构建为3个版本。然后,此C包装程序将导出一个稳定的C接口,然后由一个go pkg使用。然后,我可以将正确的C包装共享库部署到主机,并在运行时解析它 还有其他方法可以解决吗?我更喜欢使用纯(c)go代码,但我不喜欢维护复杂makefile的额外负担。 编辑:关于为什么我对在makefiles中手动处理感到不舒服的更多详细信息: 例如,_obj dir的名称在Make.inc和company中进行了硬编码,并且这些makefile依赖于一些生成的.c文件,其中包含有关共享库名称的特殊信息,在构建下一个版本的.c文件之前,我必须对其进行清理。 pkg。我的makefile的片段:
all:
    rm -f _obj/_*
    $(MAKE) -f Makefile.common XENVERSION=3.0
    rm -f _obj/_*
    $(MAKE) -f Makefile.common XENVERSION=3.4
    rm -f _obj/_*
    $(MAKE) -f Makefile.common XENVERSION=4.0
其中Makefile.common基本上是一个普通的pkg makefile,它使用ѭ1,因为我无法在包名称中对版本进行编码,因为我必须在源文件修改导入内容。 通过在软件包目录中对版本进行编码,我可以使用
GCIMPORTS=-I../../pkg/xen/_obj/$(XENVERSION)
从主cmd的Makefile中选择正确的une。 当然,我可以推出自己的makefile来调用6c和6l,cgo等,但是我似乎更喜欢利用现有的make基础结构,因为其中似乎有些智慧。     

解决方法

您是否尝试过这种方法? 特定于体系结构和操作系统的代码 可以很容易地将其修改为使用$ XENVER环境变量。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...