2017-10-14 62 views
-1

说明是否有可能编译mod_go.c成功并产生了Apache模块(mod_go.so)在Windows环境GOLANG的Windows编译mod_go.so

不幸的是我无法找到诸如类型C++编译器,Apache的版本等,以及哪些步骤我必须遵循任何详细说明?

问候

+0

也许不是。它可能与Go插件有关,它只能在Linux上工作 –

+0

顺便说一句,您是否考虑过使用BTW:在Linux上使用Apache(正如大多数人所做的那样),那么将您的Web服务器切换到Linux? –

+0

如果我使用过Apache Linux,那么我绝对不会在这里提出这个问题并讨论它。真正的挑战是要找到另一种方式,如何在Windows中做到这一点,为什么不在MacOS中。此外,据我所知,golang是一个多平台的环境。 – asimkon

回答

2

大概那是不可能的,但我离开你检查。

Go plugins只支持Linux。因此,如果您绝对需要在Go中编写Apache模块(这需要Go编译器生成的共享对象dynamic loading,这是Go编码的plugin),那么您最好转换为Linux。顺便说一句,Windows的链接器模型与Linux非常不同,所以它不会轻易改变,我不会为几年来Windows上的插件而感到惊讶。

的Linux dlopen(3)(实际上是一个POSIX feature)及其共享库(ELF共享对象,含有position-independent码)是从Windows LoadLibraryDLL的甚不同。

阅读Levine的Linkers and Loaders书(Linux版)Drepper的纸How To Write Shared Libraries

所以,如果你迫切需要进入一个插件被Apache使用的(在2018年底前EG)今年写的,我强烈建议将您的Apache服务器机器切换到Linux。

顺便说一句,它看起来像你的mod_go不使用Go插件(但也有一些外部进程通信,我离开你研究它的源代码,我只对着镜子照)也许使用FastCGI可能是简单,因为Go has FastCGI支持。可能Windows的Apache可以配置为与某些FastCGI应用程序交谈(请注意,FastCGI是而不是CGI)。

(我不知道的Windows,从来没有使用过,但了解它的怪异 - 和恕我直言逊色于Unix的连接模式中的一些东西)